翱翔.Net

释放.Net的力量
随笔 - 75, 文章 - 17, 评论 - 1132, 阅读 - 53万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

ASP.Net实现验证码!

Posted on   Hover  阅读(5185)  评论(7编辑  收藏  举报

原文出处:http://www.csdn.net/Develop/Read_Article.asp?Id=22618
上面是原文出处,是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("验证码错误!");
    }
-----------------------------------The End--------------------------------------------

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示