asp.net验证码图片生成示例
验证码是一张图片。我们需要在前台代码中写一段<img>,src指向一张页面(ValidateImage.aspx)。
<scriptlanguage="javascript">
functionchangeImg(){
$("#imgCheckNo").attr("src","ValidateImage.aspx?r="+getRandom(999));
}
functiongetRandom(n){returnMath.floor(Math.random()*n+1)}
</script>
<div>
<imgid="imgCheckNo"src="ValidateImage.aspx"style="border-color:#000000;border-width:1px;border-style:Solid">
<spanonclick="changeImg();">看不清?换一张</span>
</div>
<div>
<divclass="labelCss">验证码:</div>
<div>
<asp:TextBoxID="tbxCheckNo"runat="server"CssClass="tbxCss"></asp:TextBox>
</div>
<div>
<asp:ButtonID="btnSubmit"runat="server"Text="立即注册"OnClick="btnSubmit_Click"/>
</div>
ValidateImage.aspx用来生产验证码图片,并将验证码的码值保存到cookie中。
代码如下:
publicpartialclassValidateImage:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
this.CreateCheckCodeImage(RndNum());
}
///<summary>生成验证码
///</summary>
///<returns></returns>
privatestringRndNum()
{
intnumber;
charcode;
stringcheckCode=String.Empty;
System.Randomrandom=newRandom();
for(inti=0;i<4;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("yzmcode",checkCode));
returncheckCode;
}
///<summary>向页面生成验证码Gif图片
///</summary>
///<paramname="checkCode"></param>
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.ContentType="image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
}
最后就是后台事件,判断当前验证码是否正确。
代码如下:
#region页面控件事件
protectedvoidbtnSubmit_Click(objectsender,EventArgse)
{
if(String.Compare(Request.Cookies["yzmcode"].Value,tbxCheckNo.Text,true)!=0)
{
Response.Write("<script>alert("验证码错误!")</script>");
}
else
{
//Response.Write("<script>alert("验证吗正确!!!")</script>");
}
}
#endregion
相关文章