当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET生成图形验证码的方法详解

ASP.NET生成图形验证码的方法详解

2017年12月12日  | 移动技术网IT编程  | 我要评论

刘曹东,声动德玛西亚,东莞人才网招聘网

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网