咖喱碗糕`

`∧ ∧︵
ミ^ō^ミ灬)~ ~我是只可爱的狐狸```
http://freedom2130.cnblogs.com
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ASP.NET验证码的写法

Posted on 2006-02-18 15:41  刹那间我存在  阅读(190)  评论(0编辑  收藏  举报
  1using System.Drawing;
  2using System.Drawing.Imaging;
  3private void Page_Load(object sender, System.EventArgs e)
  4  {
  5   // 在此处放置用户代码以初始化页面
  6   //RndNum是一个自定义函数
  7   string VNum=RndNum(4); //这里的数字4代表显示的是4位的验证字符串!
  8   Session["VNum"]=VNum;
  9   ValidateCode(VNum);
 10  }

 11//生成图像函数
 12  private void ValidateCode(string VNum) 
 13  {
 14   int Gheight=(int)(VNum.Length * 11.5);
 15   //gheight为图片宽度,根据字符长度自动更改图片宽度
 16   System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
 17   Graphics g = Graphics.FromImage(Img);
 18   g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.Red),3,3); 
 19   //在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y) 
 20   System.IO.MemoryStream ms=new System.IO.MemoryStream();
 21   Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png); 
 22   Response.ClearContent(); //需要输出图象信息 要修改HTTP头 
 23   Response.ContentType="image/Png";
 24   Response.BinaryWrite(ms.ToArray());
 25   g.Dispose();
 26   Img.Dispose(); 
 27   Response.End();
 28  }

 29
 30
 31http://community.csdn.net/Expert/topic/3342/3342222.xml?temp=.5347406
 32//生成随机数函数中从Vchar数组中随机抽取
 33//字母区分大小写
 34public string RndNum(int VcodeNum) 
 35  {
 36   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" ;
 37   
 38   string[] VcArray = Vchar.Split(',') ;
 39   string  VNum = "" ;//由于字符串很短,就不用StringBuilder了
 40   int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数
 41
 42   //采用一个简单的算法以保证生成随机数的不同
 43   Random rand =new Random();
 44   for ( int i = 1 ; i < VcodeNum+1 ; i++ ) 
 45   {    
 46    if ( temp != -1
 47    {
 48     rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
 49    }
    
 50    //int t =  rand.Next(35) ;
 51    int t=rand.Next(35);
 52    if (temp != -1 && temp == t) 
 53    {
 54     return RndNum( VcodeNum );
 55    }

 56    temp = t  ;
 57    VNum += VcArray[t];
 58
 59   }

 60   return VNum ;
 61  }

 62-----------------------------------end--------------------------------------------
 63
 64下面是Login.Aspx在在调用提交按钮的响应事件中
 65public void doit(object sender, System.EventArgs e)
 66  {
 67   if(Page.IsValid)
 68   {
 69     
 70    string VNum;
 71    VNum=Session["VNum"].ToString();        
 72    Session.Abandon();
 73    ViewState["VNum"]=VNum;
 74    if(this.Vcode.Text==ViewState["VNum"].ToString())
 75    
 76
 77     Hover.Manage.CheckLogin obj=new Hover.Manage.CheckLogin();
 78     string name=username.Text;
 79     string password=FormsAuthentication.HashPasswordForStoringInConfigFile(pass.Text.ToString(),"md5");
 80     if(!obj.checklogin(name,password))
 81     {
 82      Response.Redirect("../Error.aspx?action=Errorlogin");
 83      Response.End();
 84      return;
 85     }

 86     else
 87     {
 88      Session.Add("adminname",name);
 89      Session.Add("adminpass",password);
 90      Response.Redirect("Default.aspx");
 91      Response.End();
 92      return;
 93     }

 94     
 95    }

 96    else
 97    {
 98     Response.Write("<script>alert(\"请输入正确的附加码!\");</script>");
 99    }

100   }

101  }

102   如果提交过来的验证字符串正确就验证是否是合法用户!
103否则弹出提示返回登陆页!你也可以简化此页!
104   if(this.Vcode.Text==ViewState["VNum"].ToString())
105    
106        Response.Write("验证码正确");
107    }

108   else
109    {
110        Response.Write("验证码错误!");
111    }

112
113
114