您的位置:首页 > 编程语言 > ASP

ASP.Net实现验证码(c#)

2005-04-18 20:03 661 查看
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在在调用提交按钮的响应事件中

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("验证码错误!");

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: