自己感觉不错的验证码(代码不是自己写的)

      自己感觉的验证码,验证码的代码,不是自己写的,我在此公布一下,请作者见谅
验证码代码的类,放在App_Code文件夹下
using  System;
using  System.Web;
using  System.IO;
using  System.Drawing;
    
/**/
    
///   <summary>
    
///  VerifyCode 的摘要说明。
    
///   </summary>
     public   class  VerifyCode
    {
        
//  Properties

        
#region  验证码长度(默认4个验证码的长度)#region 验证码长度(默认4个验证码的长度)
        
int  length  =   4 ;
        
public   int  Length
        {
            
get  {  return  length; }
            
set  { length  =  value; }
        }
        
#endregion

        
#region  验证码字体大小(默认12像素)#region 验证码字体大小(默认12像素)
        
int  fontSize  =   12 ;
        
public   int  FontSize
        {
            
get  {  return  fontSize; }
            
set  { fontSize  =  value; }
        }
        
#endregion

        
#region  边框补(默认2像素)#region 边框补(默认2像素)
        
int  padding  =   2 ;
        
public   int  Padding
        {
            
get  {  return  padding; }
            
set  { padding  =  value; }
        }
        
#endregion

        
#region  是否输出燥点(默认不输出)#region 是否输出燥点(默认不输出)
        
bool  chaos  =   false ;
        
public   bool  Chaos
        {
            
get  {  return  chaos; }
            
set  { chaos  =  value; }
        }
        
#endregion

        
#region  输出燥点的颜色(默认灰色)#region 输出燥点的颜色(默认灰色)
        Color chaosColor 
=  Color.LightGray;
        
public  Color ChaosColor
        {
            
get  {  return  chaosColor; }
            
set  { chaosColor  =  value; }
        }
        
#endregion

        
#region  自定义背景色(默认白色)#region 自定义背景色(默认白色)
        Color backgroundColor 
=  Color.White;
        
public  Color BackgroundColor
        {
            
get  {  return  backgroundColor; }
            
set  { backgroundColor  =  value; }
        }
        
#endregion

        
#region  自定义随机颜色数组#region 自定义随机颜色数组
        Color[] colors 
=  { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
        
public  Color[] Colors
        {
            
get  {  return  colors; }
            
set  { colors  =  value; }
        }
        
#endregion

        
#region  自定义字体数组#region 自定义字体数组
        
string [] fonts  =  {  " Arial " " Georgia "  };
        
public   string [] Fonts
        {
            
get  {  return  fonts; }
            
set  { fonts  =  value; }
        }
        
#endregion

        
#region  自定义随机码字符串序列(使用逗号分隔)#region 自定义随机码字符串序列(使用逗号分隔)
        
string  codeSerial  =   " 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,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z " ;
        
public   string  CodeSerial
        {
            
get  {  return  codeSerial; }
            
set  { codeSerial  =  value; }
        }
        
#endregion

        
#region  生成校验码图片#region 生成校验码图片
        
/**/
        
///   <summary>
        
///  生成校验码图片
        
///   </summary>
        
///   <param name="code"> 已经生成的随机码 </param>
        
///   <returns> 位图 </returns>
         public  Bitmap CreateImageCode( string  code)
        {
            
int  fSize  =  FontSize;
            
int  fWidth  =  fSize  +  Padding;

            
int  imageWidth  =  ( int )(code.Length  *  fWidth)  +   4   +  Padding  *   2 ;
            
int  imageHeight  =  fSize  *   2   +  Padding;

            System.Drawing.Bitmap image 
=   new  System.Drawing.Bitmap(imageWidth, imageHeight);

            Graphics g 
=  Graphics.FromImage(image);

            g.Clear(BackgroundColor);

            Random rand 
=   new  Random();

            
// 给背景添加随机生成的燥点
             if  ( this .Chaos)
            {

                Pen pen 
=   new  Pen(ChaosColor,  0 );
                
int  c  =  Length  *   10 ;

                
for  ( int  i  =   0 ; i  <  c; i ++ )
                {
                    
int  x  =  rand.Next(image.Width);
                    
int  y  =  rand.Next(image.Height);

                    g.DrawRectangle(pen, x, y, 
1 1 );
                }
            }

            
int  left  =   0 , top  =   0 , top1  =   1 , top2  =   1 ;

            
int  n1  =  (imageHeight  -  FontSize  -  Padding  *   2 );
            
int  n2  =  n1  /   4 ;
            top1 
=  n2;
            top2 
=  n2  *   2 ;

            Font f;
            Brush b;

            
int  cindex, findex;

            
// 随机字体和颜色的验证码字符
             for  ( int  i  =   0 ; i  <  code.Length; i ++ )
            {
                cindex 
=  rand.Next(Colors.Length  -   1 );
                findex 
=  rand.Next(Fonts.Length  -   1 );

                f 
=   new  System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);
                b 
=   new  System.Drawing.SolidBrush(Colors[cindex]);

                
if  (i  %   2   ==   1 )
                {
                    top 
=  top2;
                }
                
else
                {
                    top 
=  top1;
                }

                left 
=  i  *  fWidth;

                g.DrawString(code.Substring(i, 
1 ), f, b, left, top);
            }

            
// 画一个边框
            g.DrawRectangle( new  Pen(Color.Black,  0 ),  0 0 , image.Width  -   1 , image.Height  -   1 );

            g.Dispose();

            
return  image;
        }
        
#endregion

        
#region  将创建好的图片输出到页面#region 将创建好的图片输出到页面
        
/**/
        
///   <summary>
        
///  将创建好的图片输出到页面
        
///   </summary>
        
///   <param name="code"> 已经生成的随机码 </param>
        
///   <param name="context"> Web上下文 </param>
         public   void  CreateImageOnPage( string  code, HttpContext context)
        {
            System.IO.MemoryStream ms 
=   new  System.IO.MemoryStream();
            Bitmap image 
=   this .CreateImageCode(code);

            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

            context.Response.ClearContent();
            context.Response.ContentType 
=   " image/Jpeg " ;
            context.Response.BinaryWrite(ms.GetBuffer());

            ms.Close();
            ms 
=   null ;
            image.Dispose();
            image 
=   null ;
        }
        
#endregion

        
#region  生成随机字符码#region 生成随机字符码
        
/**/
        
///   <summary>
        
///  生成随机字符码
        
///   </summary>
        
///   <param name="codeLen"> 随机码长度 </param>
        
///   <returns> 产生的随机码 </returns>
         public   string  CreateVerifyCode( int  codeLen)
        {
            
if  (codeLen  ==   0 )
            {
                codeLen 
=  Length;
            }

            
string [] arr  =  CodeSerial.Split( ' , ' );

            
string  code  =   "" ;

            
int  randValue  =   - 1 ;

            Random rand 
=   new  Random( unchecked (( int )DateTime.Now.Ticks));

            
for  ( int  i  =   0 ; i  <  codeLen; i ++ )
            {
                randValue 
=  rand.Next( 0 , arr.Length  -   1 );

                code 
+=  arr[randValue];
            }

            
return  code;
        }
        
public   string  CreateVerifyCode()
        {
            
return  CreateVerifyCode( 0 );
        }
        
#endregion

    }

然后新建一页面,命名为CheckCode.aspx,CheckCode.aspx.cs文件代码如下 
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;

public   partial   class  CheckCode : System.Web.UI.Page
{
        
#region  验证码长度(默认4个验证码的长度)#region 验证码长度(默认4个验证码的长度)
        
int  length  =   4 ;
        
#endregion

        
#region  验证码字体大小(默认12像素)#region 验证码字体大小(默认12像素)
        
int  fontSize  =   12 ;
        
#endregion

        
#region  边框补(默认2像素)#region 边框补(默认2像素)
        
int  padding  =   1 ;
        
#endregion

        
#region  是否输出燥点(默认不输出)#region 是否输出燥点(默认不输出)
        
bool  chaos  =   true ;
        
#endregion

        
#region  输出燥点的颜色(默认灰色)#region 输出燥点的颜色(默认灰色)
        Color chaosColor 
=  System.Drawing.Color.Pink;
        
#endregion

        
#region  自定义背景色(默认白色)#region 自定义背景色(默认白色)
        Color backgroundColor 
=  Color.White;
        
#endregion

        
#region  自定义随机颜色数组#region 自定义随机颜色数组
        Color[] colors 
=  { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
        
#endregion

        
#region  自定义字体数组#region 自定义字体数组
        
string [] fonts  =  {  " Arial " " Georgia "  };
        
#endregion

        
#region  自定义随机码字符串序列(使用逗号分隔)#region 自定义随机码字符串序列(使用逗号分隔)
        
string  codeSerial  =   " 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,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z " ;
        
#endregion
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        VerifyCode v 
=   new  VerifyCode();

            v.Length 
=   this .length;

            v.FontSize 
=   this .fontSize;

            v.Chaos 
=   this .chaos;

            v.BackgroundColor 
=   this .backgroundColor;

            v.ChaosColor 
=   this .chaosColor;

            v.CodeSerial 
=   this .codeSerial;

            v.Colors 
=   this .colors;

            v.Fonts 
=   this .fonts;

            v.Padding 
=   this .padding;

            
string  code  =  v.CreateVerifyCode();     // 取随机码

            v.CreateImageOnPage(code, 
this .Context);   //  输出图片

            
// Session["CheckCode"] = code.ToLower();    //  使用Session["CheckCode"]取验证码的值

    }
}


下面基本上就完了,最后就是呈现验证码的页面,虽然简单,还是要写一下,在新建一页面,命名为
InitCode.aspx,在它的html设计视图下插入一下代码,就Over 

< table id = " Table1 "  cellSpacing = " 1 "  cellPadding = " 1 "  width = " 300 "  border = " 0 " >
            
< tr >
                
< td >< font face = " 宋体 "  color = " #ff3333 " > 验证码事例 </ font ></ td >
                
< td >< img src = " CheckCode.aspx " ></ td >
            
</ tr >
        
</ table >

好了,到此就写完了,我也要下班了,今天可是星期六,明天我就要休息了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值