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程序设计有所帮助。