生成验证码

 验证码的作用:
验证码一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别起来就更困难。像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生。 一般注册用户ID的地方以及各大论坛都要要输入验证码
 
普通验证码:(即没有图片的验证码) 
Code
 
当要在验证码中加入图片时:
///   <summary>
    
///  生成验证图片
    
///   </summary>
    
///   <param name="checkCode"> 验证字符 </param>
     public   void  checkCodes( string  checkCode)
    {
        
int  iwidth  =  ( int )(checkCode.Length  *   13 );
        System.Drawing.Bitmap image 
=   new  System.Drawing.Bitmap(iwidth,  23 );
        Graphics g 
=  Graphics.FromImage(image);
        g.Clear(Color.White);
        
// 定义颜色
        Color[] c  =  { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
        
// 定义字体 
         string [] font  =  {  " Verdana " " Microsoft Sans Serif " " Comic Sans MS " " Arial " " 宋体 "  };
        Random rand 
=   new  Random();
        
// 随机输出噪点
         for  ( int  i  =   0 ; i  <   50 ; i ++ )
        {
            
int  x  =  rand.Next(image.Width);
            
int  y  =  rand.Next(image.Height);
            g.DrawRectangle(
new  Pen(Color.LightGray,  0 ), x, y,  1 1 );
        }

        
// 输出不同字体和颜色的验证码字符
         for  ( int  i  =   0 ; i  <  checkCode.Length; i ++ )
        {
            
int  cindex  =  rand.Next( 7 );
            
int  findex  =  rand.Next( 5 );

            Font f 
=   new  System.Drawing.Font(font[findex],  10 , System.Drawing.FontStyle.Bold);
            Brush b 
=   new  System.Drawing.SolidBrush(c[cindex]);
            
int  ii  =   4 ;
            
if  ((i  +   1 %   2   ==   0 )
            {
                ii 
=   2 ;
            }
            g.DrawString(checkCode.Substring(i, 
1 ), f, b,  3   +  (i  *   12 ), ii);
        }
        
// 画一个边框
        g.DrawRectangle( new  Pen(Color.Black,  0 ),  0 0 , image.Width  -   1 , image.Height  -   1 );

        
// 输出到浏览器
        System.IO.MemoryStream ms  =   new  System.IO.MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        HttpContext.Current.Response.ClearContent();
        
// Response.ClearContent();
        HttpContext.Current.Response.ContentType  =   " image/Jpeg " ;
        HttpContext.Current.Response.BinaryWrite(ms.ToArray());
        g.Dispose();
        image.Dispose();
    }
 
对验证码的调用:
  public   void  DrawImage()
    {
        HttpContext.Current.Session[
" CheckCode " =  RndNum( 4 );
        checkCodes(HttpContext.Current.Session[
" CheckCode " ].ToString());           
    }

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