ASP.Net实现验证码
点击次数:15 次 发布日期:2008-11-26 10:59:08 作者:源代码网
|
源代码网推荐 上面是原文出处,是VB版!在评论中 cwbboy 给出了C#代码 源代码网推荐 自己参考了代码,实践了一下!OK记录一下! 源代码网推荐 生成图片的Gif.aspx文件!需要引入以下两名命名空间! 源代码网推荐 -----------------------------------start---------------------------------------------- 源代码网推荐 using System.Drawing; 源代码网推荐 using System.Drawing.Imaging; 源代码网推荐 private void Page_Load(object sender, System.EventArgs e) 源代码网推荐 { 源代码网推荐 // 在此处放置用户代码以初始化页面 源代码网推荐 //RndNum是一个自定义函数 源代码网推荐 string VNum=RndNum(4); //这里的数字4代表显示的是4位的验证字符串! 源代码网推荐 Session["VNum"]=VNum; 源代码网推荐 ValidateCode(VNum); 源代码网推荐 } 源代码网推荐 //生成图像函数 源代码网推荐 private void ValidateCode(string VNum) 源代码网推荐 { 源代码网推荐 int Gheight=(int)(VNum.Length * 11.5); 源代码网推荐 //gheight为图片宽度,根据字符长度自动更改图片宽度 源代码网推荐 System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20); 源代码网推荐 Graphics g = Graphics.FromImage(Img); 源代码网推荐 g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.Red),3,3); 源代码网推荐 //在矩形内绘制字串(字串,字体,画笔颜色,左上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 = "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[] 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(35); 源代码网推荐 if (temp != -1 && temp == t) 源代码网推荐 { 源代码网推荐 return RndNum( VcodeNum ); 源代码网推荐 } 源代码网推荐 temp = t ; 源代码网推荐 VNum += VcArray[t]; 源代码网推荐 源代码网推荐 } 源代码网推荐 return VNum ; 源代码网推荐 } 源代码网推荐 -----------------------------------end-------------------------------------------- 源代码网推荐 源代码网推荐 下面是Login.Aspx在在调用提交按钮的响应事件中 源代码网推荐 源代码网推荐 private void Page_Load(object sender, System.EventArgs e) 源代码网推荐 { 源代码网推荐 if(!Page.IsPostBack ) 源代码网推荐 { 源代码网推荐 Session.Clear(); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 public void doit(object sender, System.EventArgs e) 源代码网推荐 { 源代码网推荐 if(Page.IsValid) 源代码网推荐 { 源代码网推荐 源代码网推荐 string VNum; 源代码网推荐 VNum=Session["VNum"].ToString(); 源代码网推荐 ViewState["VNum"]=VNum; 源代码网推荐 if(this.Vcode.Text==ViewState["VNum"].ToString()) 源代码网推荐 { 源代码网推荐 源代码网推荐 Hover.Manage.CheckLogin obj=new Hover.Manage.CheckLogin(); 源代码网推荐 string name=username.Text; 源代码网推荐 string password=FormsAuthentication.HashPasswordForStoringInConfigFile(pass.Text.ToString(),"md5"); 源代码网推荐 if(!obj.checklogin(name,password)) 源代码网推荐 { 源代码网推荐 Response.Redirect("../Error.aspx?action=Errorlogin"); 源代码网推荐 Response.End(); 源代码网推荐 return; 源代码网推荐 } 源代码网推荐 else 源代码网推荐 { 源代码网推荐 Session.Add("adminname",name); 源代码网推荐 Session.Add("adminpass",password); 源代码网推荐 Response.Redirect("Default.aspx"); 源代码网推荐 Response.End(); 源代码网推荐 return; 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 else 源代码网推荐 { 源代码网推荐 Response.Write("<script>alert("请输入正确的附加码!");</script>"); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 如果提交过来的验证字符串正确就验证是否是合法用户! 源代码网推荐 否则弹出提示返回登陆页!你也可以简化此页! 源代码网推荐 if(this.Vcode.Text==ViewState["VNum"].ToString()) 源代码网推荐 { 源代码网推荐 Response.Write("验证码正确"); 源代码网推荐 } 源代码网推荐 else 源代码网推荐 { 源代码网推荐 Response.Write("验证码错误!"); 源代码网推荐 } 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
