验证码

验证码类:
using System.Drawing;
public  partial  class validateNum : System.Web.UI.Page
    {
         protected  void Page_Load( object sender, EventArgs e)
        {
             if (!IsPostBack)
            {
                 string validateNum = CreateRandomNum( 4); // 成生位随机字符串
                CreateImage(validateNum); // 将生成的随机字符串绘成图片
                Session[ " ValidateNum "] = validateNum; // 保存验证码
            }
        }
         // 生成随机字符串
         private  string CreateRandomNum( int NumCount)
        {
             string allChar =  " 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z ";
             string[] allCharArray = allChar.Split( ' , '); // 拆分成数组
             string randomNum =  "";
             int temp = - 1; // 记录上次随机数的数值,尽量避免产生几个相同的随机数

            Random rand =  new Random();
             for ( int i =  0; i < NumCount; i++)
            {
                 if (temp != - 1)
                {
                    rand =  new Random(i * temp * (( int)DateTime.Now.Ticks));
                }
                 int t = rand.Next( 35);
                 if (temp == t)
                {
                     return CreateRandomNum(NumCount);
                }
                temp = t;
                randomNum += allCharArray[t];
            }
             return randomNum;
        }




         // 生成图片
         private  void CreateImage( string validateNum)
        {
             if (validateNum ==  null || validateNum.Trim() == String.Empty)
                 return;
             // 生成Bitmap图像
            System.Drawing.Bitmap image =  new System.Drawing.Bitmap(validateNum.Length *  12 +  1022);
            Graphics g = Graphics.FromImage(image);

             try
            {
                 // 生成随机生成器
                Random random =  new Random();

                 // 清空图片背景色
                g.Clear(Color.White);

                 // 画图片的背景噪音线
                 for ( int i =  0; i <  25; i++)
                {
                     int x1 = random.Next(image.Width);
                     int x2 = random.Next(image.Width);
                     int y1 = random.Next(image.Height);
                     int y2 = random.Next(image.Height);

                    g.DrawLine( new Pen(Color.Silver), x1, y1, x2, y2);
                }

                Font font =  new System.Drawing.Font( " Arial "12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
                System.Drawing.Drawing2D.LinearGradientBrush brush =  new System.Drawing.Drawing2D.LinearGradientBrush( new Rectangle( 00, image.Width, image.Height), Color.Blue, Color.DarkRed,  1.2ftrue);
                g.DrawString(validateNum, font, brush,  22);

                 // 画图片的前景噪音点
                 for ( int i =  0; i <  100; i++)
                {
                     int x = random.Next(image.Width);
                     int y = random.Next(image.Height);

                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }

                 // 画图片的边框线
                g.DrawRectangle( new Pen(Color.Silver),  00, image.Width -  1, image.Height -  1);

                System.IO.MemoryStream ms =  new System.IO.MemoryStream();
                 // 将图像保存到指定的流
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                Response.ClearContent();
                Response.ContentType =  " image/Gif ";
                Response.BinaryWrite(ms.ToArray());
            }
             finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
    }

使用:
<script language= " javascript " type= " text/javascript ">
        function changeCode() {   
             var imgNode = document.getElementById( " Image1 ");   
            imgNode.src =  " ../ValidateNum.aspx?t= " + ( new Date()).valueOf(); 
  //  这里加个时间的参数是为了防止浏览器缓存的问题   
        } 
 </script>

<img ID= " Image1 " Height= " 22px " Width= " 48px " src= " ../ValidateNum.aspx " onclick= " changeCode() " />
 
用户自定义控件
protected  void CustomValidator1_ServerValidate( object source, ServerValidateEventArgs args)
    {
         if (txtValidateNum.Text.ToUpper().Trim() == Session[ " ValidateNum "].ToString())
        {
            args.IsValid =  true;
        }
         else
            args.IsValid =  false;
    }
 

你可能感兴趣的:(验证码)