C#.Net2.0 完美随机验证码 0.10版本

原创 2007年10月10日 08:53:00
 花了两晚上的时间,昨天花2小时搞定生成普通的验证码

 

今天晚上花4个小时左右的时间来旋转字体和显示正确上了。

打算下一版加上随机噪点。好了,要睡了!哈哈哈哈~~~


using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

using  System.Drawing;


namespace  Test
...{
        
/**////  <summary>
        
///  完美随机验证码  0.10  
        
///  Author                          :              zhouyu   http://max.cszi.com
        
///  Verion                          :              0.10
        
///  Update                        :              2007-10-9
        
///  Description            :              随机生成设定验证码,并随机旋转一定角度
        
///  </summary>

        public  partial  class  ValidateCode  :  System.Web.UI.Page
        
...{

                
protected  void  Page_Load(object  sender,  EventArgs  e)
                
...{
                        
string  randomcode  =  this.CreateRandomCode(4);
                        Session[
"ValidateCode"]  =  randomcode;
                        
//ViewState["ValidateCode"]  =  randomcode;
                        this.CreateImage(randomcode);
                }


                
/**////  <summary>
                
///  生成随机码
                
///  </summary>
                
///  <param  name="length">随机码个数</param>
                
///  <returns></returns>

                private  string  CreateRandomCode(int  length)
                
...{
                        
int  rand;
                        
char  code;
                        
string  randomcode  =  String.Empty;

                        
//生成一定长度的验证码
                        System.Random  random  =  new  Random();
                        
for  (int  i  =  0;  i  <  length;  i++)
                        
...{
                                rand  
=  random.Next();

                                
if  (rand  %  3  ==  0)
                                
...{  code  =  (char)('A'  +  (char)(rand  %  26));  }
                                
else
                                
...{  code  =  (char)('0'  +  (char)(rand  %  10));  }

                                randomcode  
+=  code.ToString();
                        }

                        
return  randomcode;
                }



                
/**////  <summary>
                
///  创建随机码图片
                
///  </summary>
                
///  <param  name="randomcode">随机码</param>

                private  void  CreateImage(string  randomcode)
                
...{
                        
int  randAngle  =  45;            //随机转动角度
                        int  mapwidth  =  (int)(randomcode.Length  *  22);
                        Bitmap  map  
=  new  Bitmap(mapwidth,  28);                            //创建图片背景
                        Graphics  graph  =  Graphics.FromImage(map);
                        
//Font  fontstyle  =  new  Font("Arial",  20,  FontStyle.Bold);            //字体样式
                        
//graph.FillRectangle(new  SolidBrush(Color.Black),  0,  0,  map.Width+1,  map.Height+1);          //填充一个有背景的矩形
                        graph.Clear(Color.AliceBlue);              //清除画面,填充背景
                        
//graph.DrawRectangle(new  Pen(Color.Black,  0),  0,  0,  map.Width  -  1,  map.Height  -  1);              //画一个边框
                        
//graph.SmoothingMode  =  System.Drawing.Drawing2D.SmoothingMode.AntiAlias;        //模式
                        

                        Random  rand  
=  new  Random();

                        
//背景噪点生成
                        
//Pen  blackPen  =  new  Pen(Color.Black,  0);
                        
//for  (int  i  =  0;  i  <  2000;  i++)
                        
//{
                        
//        int  x  =  rand.Next(0,  map.Width);
                        
//        int  y  =  rand.Next(0,  map.Height);
                        
//        graph.DrawRectangle(blackPen,  x,  y,    1,  1);

                        
//}

                        
//验证码旋转,防止机器识别
                        char[]  chars  =  randomcode.ToCharArray();            //拆散字符串成单字符数组

                        
//文字距中
                        StringFormat  format  =  new  StringFormat(StringFormatFlags.NoClip);
                        format.Alignment  
=  StringAlignment.Center;
                        format.LineAlignment  
=  StringAlignment.Center;

                        
for  (int  i  =  0;  i  <  chars.Length;  i++)
                        
...{
                                Font  fontstyle  
=  new  Font("Arial",  rand.Next(20,22),  FontStyle.Regular);            //字体样式
                                Point  dot  =  new  Point(16,  16);
                                
//graph.DrawString(dot.X.ToString(),  fontstyle,  new  SolidBrush(Color.Black),  10,  150);                //测试X坐标显示间距的
                                float  angle  =  rand.Next(-randAngle,  randAngle);            //转动的度数

                                graph.TranslateTransform(dot.X,  dot.Y);          
//移动光标到指定位置
                                graph.RotateTransform(angle);                              
                                graph.DrawString(chars[i].ToString(),  fontstyle,  
new  SolidBrush(Color.Blue),    1  ,  1  ,  format  );
                                graph.RotateTransform(
-angle);                    //转回去
                                graph.TranslateTransform(2,  -dot.Y);          //移动光标到指定位置
                        }

                        
//graph.DrawString(randomcode,  fontstyle,  new  SolidBrush(Color.Blue),  2,  2);                    //标准随机码
                        
                        
//生成图片
                        System.IO.MemoryStream  ms  =  new  System.IO.MemoryStream();
                        map.Save(ms,  System.Drawing.Imaging.ImageFormat.Gif);
                        Response.ClearContent();
                        Response.ContentType  
=  "image/gif";
                        Response.BinaryWrite(ms.ToArray());
                        graph.Dispose();
                        map.Dispose();
                }




        }


}


验证码之算术验证码

-
  • 1970年01月01日 08:00

C#.Net 较完美随机验证码通用类

  • 2008年11月20日 16:17
  • 4KB
  • 下载

完美验证码识别系统V3.1

  • 2017年10月31日 16:32
  • 16.42MB
  • 下载

完美验证码识别系统V3.2.1.zip--验证码识别通用组件

  • 2017年12月28日 15:51
  • 15.62MB
  • 下载

Python使用完美验证码识别系统笔记

背景 Python版本:3.6.4 32bit,必须是32位,不然调用不了WmCode.dll http库:Requests Windows10 注意事项 UseUnicodeString...
  • enlangs
  • enlangs
  • 2018-02-25 10:43:11
  • 135

完美验证码识别系统

  • 2018年01月07日 03:49
  • 13.66MB
  • 下载

golang随机数

随机生成验证码/** * size 随机码的位数 * kind 0 // 纯数字 1 // 小写字母 2 // 大写字母 3 ...
  • yang8023tao
  • yang8023tao
  • 2016-11-25 11:48:25
  • 752

C#随机验证码随机验证码随机验证码

  • 2011年06月03日 11:30
  • 131KB
  • 下载

Storm 0.10.0新特性整理一览

1、安全性和多用户调度部署 和早期的Hadoop相似,Storm被假设会部署到远离安全威胁的环境中,所以一开始并没有太多的考虑安全性问题。虽然大量用户对Storm都制定了他们自己的安全举措(通常...
  • liuxiao723846
  • liuxiao723846
  • 2017-11-23 17:01:04
  • 225

随机验证码图片验证

记录一个随机验证码 获取验证码时使用 这是我看到别人写的修改的。 public class CodeUtils { /** *注释一些难以看清的码 */ priv...
  • a214024475
  • a214024475
  • 2016-11-19 19:38:40
  • 612
收藏助手
不良信息举报
您举报文章:C#.Net2.0 完美随机验证码 0.10版本
举报原因:
原因补充:

(最多只允许输入30个字)