ASP验证码

该博客主要介绍了ASP.NET中验证码的实现。通过自定义函数生成随机的4位验证字符串,将其存储在Session中,并生成对应的图像。同时,在提交表单时,会验证用户输入的验证码是否正确,若正确则进一步验证用户是否合法,否则提示重新输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值