ASP.net 验证码实现代码(C#)

时间:2021-05-28

publicclassValidateCode:System.Web.UI.Page
{
privatevoidPage_Load(objectsender,System.EventArgse)
{
this.CreateCheckCodeImage(GenerateCheckCode());
}
#regionWeb窗体设计器生成的代码
overrideprotectedvoidOnInit(EventArgse)
{
//
//CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

///<summary>
///设计器支持所需的方法-不要使用代码编辑器修改
///此方法的内容。
///</summary>
privatevoidInitializeComponent()
{
this.Load+=newSystem.EventHandler(this.Page_Load);
}
#endregion
privatestringGenerateCheckCode()
{
intnumber;
charcode;
stringcheckCode=String.Empty;
System.Randomrandom=newRandom();
for(inti=0;i<5;i++)
{
number=random.Next();
if(number%2==0)
code=(char)('0'+(char)(number%10));
else
code=(char)('A'+(char)(number%26));
checkCode+=code.ToString();
}
Response.Cookies.Add(newHttpCookie("CheckCode",checkCode));
returncheckCode;
}
privatevoidCreateCheckCodeImage(stringcheckCode)
{
if(checkCode==null||checkCode.Trim()==String.Empty)
return;
System.Drawing.Bitmapimage=newSystem.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length*12.5)),22);
Graphicsg=Graphics.FromImage(image);
try
{
//生成随机生成器
Randomrandom=newRandom();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for(inti=0;i<25;i++)
{
intx1=random.Next(image.Width);
intx2=random.Next(image.Width);
inty1=random.Next(image.Height);
inty2=random.Next(image.Height);
g.DrawLine(newPen(Color.Silver),x1,y1,x2,y2);
}
Fontfont=newSystem.Drawing.Font("Arial",12,(System.Drawing.FontStyle.Bold|System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrushbrush=newSystem.Drawing.Drawing2D.LinearGradientBrush(newRectangle(0,0,image.Width,image.Height),Color.Blue,Color.DarkRed,1.2f,true);
g.DrawString(checkCode,font,brush,2,2);
//画图片的前景噪音点
for(inti=0;i<100;i++)
{
intx=random.Next(image.Width);
inty=random.Next(image.Height);
image.SetPixel(x,y,Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(newPen(Color.Silver),0,0,image.Width-1,image.Height-1);
System.IO.MemoryStreamms=newSystem.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.C;
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
}


  假如以上验证码生成器页面名为:CheckCode.aspx,那么在登录页面中使用“<IMG>”这个HTML元素来显示生成的验证码图片:<IMGsrc="CheckCode.aspx">
  在登录页面的登录按钮的处理事件中使用以下代码判断验证码:

privatevoidbtnLogin_Click(objectsender,System.Web.UI.ImageClickEventArgse)
{
if(Request.Cookies["CheckCode"]==null)
{
lblMessage.Text="您的浏览器设置已被禁用Cookies,您必须设置浏览器允许使用Cookies选项后才能使用本系统。";
lblMessage.Visible=true;
return;
}
if(String.Compare(Request.Cookies["CheckCode"].Value,txtCheckCode.Text,true)!=0)
{
lblMessage.Text="验证码错误,请输入正确的验证码。";
lblMessage.Visible=true;
return;
}

}

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章