Home >Backend Development >C#.Net Tutorial >Detailed explanation of how ASP.NET generates graphic verification codes

Detailed explanation of how ASP.NET generates graphic verification codes

高洛峰
高洛峰Original
2017-01-09 09:28:581276browse

The example in this article describes how ASP.NET generates graphical verification codes. Share it with everyone for your reference, the details are as follows:

Usually there are three main steps to generate a graphic verification code:

(1) Randomly generate a random string of length N, N The value can be set by the developer. The string can contain numbers, letters, etc.
(2) Create a randomly generated string into a picture and display it.
(3) Save the verification code.

Create a new page as default.aspx, place a TextBox control and an Image control. The TextBox control is used to input the generated string, the Image control is used to display the string, and its picture is used to verify the generated graphic. Code imageUrl="/default.aspx";

The source code of the default.aspx page is:

<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>

The code of the graphic verification code is :

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(&#39;,&#39;);//拆分成数组
    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();
    }
  }
}

I hope this article will be helpful to everyone in asp.net programming.

For more detailed explanations of how ASP.NET generates graphic verification codes and related articles, please pay attention to the PHP Chinese website!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn