ASP.NET实现验证码

首先外观显示页面代码:

 1protected System.Web.UI.WebControls.Image ValidateImage;
 2
 3        private void Page_Load(object sender, System.EventArgs e)
 4        {
 5            if(!IsPostBack)
 6            {
 7                //验证码的生成和获取,用于登录页面的有效验证。
 8                string ValidCode = DB.CheckCode.MakeValidateCode();
 9                ValidateImage.ImageUrl = "xbm.aspx?code="+ ValidCode;
10                ViewState["ValidCode"= ValidCode;
11                ViewState["CheckCode"]=DB.CheckCode.DecodeValidateCode(ViewState["ValidCode"].ToString());
12                ary_chk=new ArrayList();
13                ary_chk.Add(ViewState["CheckCode"]);
14                ary_chk.Add(System.DateTime.Now);
15                //判断输入的验证码是否正确
16                BtnSub.Attributes["onclick"]="return Check(\""+ViewState["CheckCode"].ToString()+"\");";
17            }

18        }

以下为处理验证码类:
//获取随机生成的验证码类
public class CheckCode
    
{
        
public static string DecodeValidateCode(string code)
        
{
            
char [] s = code.ToCharArray();
            
return String.Format("{0}{1}{2}{3}", s[0],s[9],s[3],s[7]);
        }

        
        
//随机生成验证码序列
        public static string MakeValidateCode()
        
{
            
char[] s = new char[]'2','3','4','5','6','7','8','9','a'
                                     ,
'b','c','d','e','f','g','h','i','j','k','m','n','p','q'
                                     ,
'r','s','t','u','v','w','x','y','z'}
;

            
string num = "";
            Random r 
= new Random();
            
for(int i = 0; i < 10; i++)
            
{
                num 
+= s[r.Next(0, s.Length)].ToString(); 
            }

            
return num;
        }

    }
把接收的验证码转为图片xbm.aspx?code=生成的验证玛:
        private void Page_Load(object sender, System.EventArgs e)
        
{
            
if (!IsPostBack)
            
{
                
if (Request["code"!= null)
                
{
                    
string Validcode = Request["code"];
                    
//进行验证码长度的判断
                    if (Validcode.Length <10)
                    
{
                        Validcode 
= "3360";
                    }

                    
else
                    
{
                        
//获取验证码
                        Validcode = DB.CheckCode.DecodeValidateCode(Validcode);
                    }

                    ValidateCode code 
=new ValidateCode();
                    
//画出验证码
                    code.DrawValidateCode(this, Validcode);
                }

}


//实现一个验证码的类

        
public class ValidateCode
        
{
            
private Bitmap validateimage;
            
private Graphics g;
            
public ValidateCode()
            
{
                validateimage 
= new Bitmap(4017, PixelFormat.Format24bppRgb);
                g 
= Graphics.FromImage(validateimage);
            }

            
//设置验证码的相关属性
            public void DrawValidateCode(Page e, string i)
            
{
                g.FillRectangle(
new SolidBrush(Color.FromArgb(0xee,0xee,0xee)), 004017);
                g.DrawString(i, 
new Font("宋体",12),new SolidBrush(Color.Black),new PointF(1,0));
                g.Save();
                MemoryStream ms
=new MemoryStream();
                validateimage.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
                e.Response.ClearContent();
                e.Response.ContentType
="image/gif";
                e.Response.BinaryWrite(ms.ToArray());
                e.Response.End();
            }

        }



以上大家可以自己做自己的整和,也可以随自己的意愿进行修改。
原文地址:https://www.cnblogs.com/hanguoji/p/282521.html