ASP.NET生成图形验证码的方法详解
本文实例讲述了ASP.NET生成图形验证码的方法。分享给大家供大家参考,具体如下:
通常生成一个图形验证码主要有3个步骤:
(1)随机产生一个长度为N的随机字符串,N的值可由开发可由开发人员自行设置。该字符串可以包含数字、字母等。
(2)将随机生成的字符串创建成图片,并显示。
(3)保存验证码。
新建一个页面为default.aspx, 放置一个TextBox控件和一个Image控件,TextBox控件用于输入生成的字符串,Image控件用于显示字符串,它的图片就为生成的图形验证码imageUrl=“/default.aspx”;
default.aspx页面的源代码为:
<formid="form1"runat="server"> <div> <asp:TextBoxID="TextBox1"runat="server"></asp:TextBox> <asp:ImageID="Image1"imageUrl=“/default.aspx”runat="server"/> </div> </form>
图形验证码的代码为:
usingSystem;
usingSystem.Configuration;
usingSystem.Data;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Xml.Linq;
usingSystem.Drawing;
publicpartialclass_Default:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!IsPostBack)
{
stringvalidateNum=CreateRandomNum(4);
CreateImage(validateNum);
Session["ValidateNum"]=validateNum;
}
}
//生产随机数
privatestringCreateRandomNum(intNumCount)
{
stringallChar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,m,n,o,p,q,s,t,u,w,x,y,z";
string[]allCharArray=allChar.Split(',');//拆分成数组
stringrandomNum="";
inttemp=-1;//记录上次随机数的数值,尽量避免产生几个相同的随机数
Randomrand=newRandom();
for(inti=0;i<NumCount;i++)
{
if(temp!=-1)
{
rand=newRandom(i*temp*((int)DateTime.Now.Ticks));
}
intt=rand.Next(35);
if(temp==t)
{
returnCreateRandomNum(NumCount);
}
temp=t;
randomNum+=allCharArray[t];
}
returnrandomNum;
}
//生产图片
privatevoidCreateImage(stringvalidateNum)
{
if(validateNum==null||validateNum.Trim()==string.Empty)
return;
//生成BitMap图像
System.Drawing.Bitmapimage=newSystem.Drawing.Bitmap(validateNum.Length*12+12,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,x2,y1,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(validateNum,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();
}
}
}
更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net字符串操作技巧汇总》、《asp.net操作XML技巧总结》、《asp.net文件操作技巧汇总》、《asp.netajax技巧总结专题》及《asp.net缓存操作技巧总结》。
希望本文所述对大家asp.net程序设计有所帮助。