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

原文出处:http://www.csdn.net/Develop/Read_Article.asp?Id=22618

http://www.cnblogs.com/c21/archive/2006/07/25/371608.html#458773
上面是原文出处,是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在在调用提交按钮的响应事件中
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(
"验证码错误!");
    }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值