`

ASP.Net实现验证码

阅读更多

原文出处: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 ;//
记录上次随机数值,尽量避免生产几个一样的随机数<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

//采用一个简单的算法以保证生成随机数的不同
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("
验证码错误!");
}
-----------------------------------The End<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 14.25pt; HEIGHT: 14.25pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Emoticons/72_72.gif" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C03%5Cclip_image001.gif"></imagedata></shape>--------------------------------------------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics