欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-10 18:13: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程序设计有所帮助。