ASP.NET生成图形验证码的方法详解
程序员文章站
2023-12-16 19:30:16
本文实例讲述了asp.net生成图形验证码的方法。分享给大家供大家参考,具体如下:
通常生成一个图形验证码主要 有3个步骤:
(1)随机产生一个长度为n的随机字符串,n...
本文实例讲述了asp.net生成图形验证码的方法。分享给大家供大家参考,具体如下:
通常生成一个图形验证码主要 有3个步骤:
(1)随机产生一个长度为n的随机字符串,n的值可由开发可由开发人员自行设置。该字符串可以包含数字、字母等。
(2)将随机生成的字符串创建成图片,并显示。
(3)保存验证码。
新建一个页面为default.aspx, 放置一个textbox控件和一个image控件,textbox控件用于输入生成的字符串,image控件用于显示字符串,它的图片就为生成的图形验证码imageurl=“/default.aspx”;
default.aspx页面的源代码为:
<form id="form1" runat="server"> <div> <asp:textbox id="textbox1" runat="server"></asp:textbox> <asp:image id="image1" imageurl=“/default.aspx” runat="server" /> </div> </form>
图形验证码的代码为:
using system; using system.configuration; using system.data; using system.linq; using system.web; using system.web.security; using system.web.ui; using system.web.ui.htmlcontrols; using system.web.ui.webcontrols; using system.web.ui.webcontrols.webparts; using system.xml.linq; using system.drawing; public partial class _default : system.web.ui.page { protected void page_load(object sender, eventargs e) { if (!ispostback) { string validatenum = createrandomnum(4); createimage(validatenum); session["validatenum"] = validatenum; } } //生产随机数 private string createrandomnum(int numcount) { string allchar = "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(',');//拆分成数组 string randomnum = ""; int temp = -1; //记录上次随机数的数值,尽量避免产生几个相同的随机数 random rand = new random(); for (int i = 0; i < numcount; i++) { if (temp != -1) { rand = new random(i*temp*((int)datetime.now.ticks)); } int t = rand.next(35); if (temp == t) { return createrandomnum(numcount); } temp = t; randomnum += allchararray[t]; } return randomnum; } //生产图片 private void createimage(string validatenum) { if (validatenum == null || validatenum.trim() == string.empty) return; //生成bitmap图像 system.drawing.bitmap image = new system.drawing.bitmap(validatenum.length*12+12,22); graphics g = graphics.fromimage(image); try { //生成随机生成器 random random = new random(); //清空图片背景 g.clear(color.white); //画图片的背景噪音线 for (int i = 0; i < 25; i++) { int x1 = random.next(image.width); int x2 = random.next(image.width); int y1 = random.next(image.height); int y2 = random.next(image.height); g.drawline(new pen(color.silver),x1,x2,y1,y2); } font font = new system.drawing.font("arial",12,(system.drawing.fontstyle.bold|system.drawing.fontstyle.italic)); system.drawing.drawing2d.lineargradientbrush brush=new system.drawing.drawing2d.lineargradientbrush(new rectangle(0,0,image.width,image.height),color.blue,color.darkred,1.2f,true); g.drawstring(validatenum,font,brush ,2,2); //画图片的前景噪音点 for( int i=0;i<100;i++) { int x=random.next(image.width); int y=random.next(image.height); image.setpixel(x,y,color.fromargb(random.next())); } //画图片的边框线 g.drawrectangle(new pen(color.silver),0,0,image.width-1,image.height-1); system.io.memorystream ms=new system.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.net ajax技巧总结专题》及《asp.net缓存操作技巧总结》。
希望本文所述对大家asp.net程序设计有所帮助。