随机验证码

< img id = " img1 "  width = " 100 "  height = " 20 "  style = " cursor: pointer "  src = " RandomCode.aspx "  alt = " 看不清?点击更换 "  onclick = " this.src=this.src+'?' "   />

 

新建RandomCode.aspx

 

代码
RandomCode.aspx.cs



using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Drawing;
using  System.IO;
using  System.Drawing.Imaging;
using  System.Drawing.Drawing2D;

namespace  WebApplication10
{
    
public   partial   class  RandomCode : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, System.EventArgs e)
        {
            
//  在此处放置用户代码以初始化页面
            
// RndNum是一个自定义函数
             string  VNum  =  RndNum( 4 );  // 这里的数字8代表显示的是8位的验证字符串!
            Session[ " RandomCode " =  VNum;
            
// ValidateCode(VNum);
            CreateValidateGraphic(VNum);
        }

        
// 生成图像函数
         private   void  ValidateCode( string  VNum)
        {
            
int  Gheight  =  ( int )(VNum.Length  *   7 );
            
// gheight为图片宽度,根据字符长度自动更改图片宽度
            System.Drawing.Bitmap Img  =   new  System.Drawing.Bitmap(Gheight,  12 );
            Graphics g 
=  Graphics.FromImage(Img);
            g.DrawString(VNum, 
new  System.Drawing.Font( " 宋体 " 9 ),  new  System.Drawing.SolidBrush(Color.Red),  0 0 );
            
// 在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y) 
            System.IO.MemoryStream ms  =   new  System.IO.MemoryStream();
            Img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            Response.ClearContent(); 
// 需要输出图象信息 要修改HTTP头 
            Response.ContentType  =   " image/Png " ;
            Response.BinaryWrite(ms.ToArray());
            g.Dispose();
            Img.Dispose();
            Response.End();
        }

        
// 生成随机数函数中从Vchar数组中随机抽取
        
// 字母区分大小写
         public   string  RndNum( int  VcodeNum)
        {
            
string  Vchar  =   " A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,W,X,Y,Z,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,W,X,Y,Z " ;
            
// string Vchar = "零,壹,贰,叁,肆,伍,陆,柒,捌,玖,拾,湖,南,强,智,科,技,有,限,公,司,陈,伟,航,一,二,三,四,五,六,七,八,九,十,正" ;

            
string [] VcArray  =  Vchar.Split( ' , ' );
            
string  VNum  =   "" ; // 由于字符串很短,就不用StringBuilder了
             int  temp  =   - 1 ; // 记录上次随机数值,尽量避免生产几个一样的随机数

            
// 采用一个简单的算法以保证生成随机数的不同
            Random rand  =   new  Random();
            
for  ( int  i  =   1 ; i  <  VcodeNum  +   1 ; i ++ )
            {
                
if  (temp  !=   - 1 )
                {
                    rand 
=   new  Random(i  *  temp  *   unchecked (( int )DateTime.Now.Ticks));
                }
                
// int t =  rand.Next(35) ;
                 int  t  =  rand.Next( 54 );
                
if  (temp  !=   - 1   &&  temp  ==  t)
                {
                    
return  RndNum(VcodeNum);
                }
                temp 
=  t;
                VNum 
+=  VcArray[t];

            }
            
return  VNum;
        }

        
public   void  CreateValidateGraphic( string  validateNum)
        {
            
// Bitmap image=new Bitmap((int)Math.Ceiling(validateNum.Length*12.5),22);
            Bitmap image  =   new  Bitmap( 70 22 );
            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  Font( " Arial " 14 , (FontStyle.Bold  |  FontStyle.Italic));
                LinearGradientBrush brush 
=   new  LinearGradientBrush( new  Rectangle( 0 0 , image.Width, image.Height), Color.Blue, Color.DarkRed,  1.2f true );
                g.DrawString(validateNum, font, brush, 
3 2 );
                
// 画图片的前景干扰点
                 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),  0 0 , image.Width  -   1 , image.Height  -   1 );
                
// 保存图片数据
                MemoryStream stream  =   new  MemoryStream();
                image.Save(stream, ImageFormat.Jpeg);
                
// 输出图片
                Response.Clear();
                Response.ContentType 
=   " image/jpeg " ;
                Response.BinaryWrite(stream.ToArray());
            }
            
finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
    }
}

 

 

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