ASP. NET Detailed Explanation of the Method of Generating Graphic Verification Code

  • 2021-07-22 09:35:39
  • OfStack

This paper describes the method of generating graphic verification code by ASP. NET. Share it for your reference, as follows:

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

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

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

The source code for 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;
    }
  }
  // Production random number 
  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(',');// Split into arrays 
    string randomNum = "";
    int temp = -1;               // Record the value of the last random number and try to avoid generating several identical random numbers 
    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;
  }
  // Production picture 
  private void CreateImage(string validateNum)
  {
    if (validateNum == null || validateNum.Trim() == string.Empty)
      return;
    // Generate BitMap Image 
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(validateNum.Length*12+12,22);
    Graphics g = Graphics.FromImage(image);
    try 
    { 
      // Generate random generator 
      Random random = new Random();
      // Empty the background of the picture 
      g.Clear(Color.White);
      // Draw the background noise line of the picture 
      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);
      // Noise points in the foreground of drawing pictures 
      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()));
      }
      // Draw the border line of the picture 
      g.DrawRectangle(new Pen(Color.Silver),0,0,image.Width-1,image.Height-1);
      System.IO.MemoryStream ms=new System.IO.MemoryStream();
      // Saves an image to a specified stream 
      image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
      Response.ClearContent();
      Response.ContentType="image/Gif";
      Response.BinaryWrite(ms.ToArray());
    }
    finally
    {
      g.Dispose();
      image.Dispose();
    }
  }
}

For more readers interested in asp. net related contents, please check the topics on this site: "Summary of asp String Operation Skills", "Summary of asp. net Operation Skills", "Summary of asp. net File Operation Skills", "Summary of asp. net ajax Skills" and "Summary of asp. net Cache Operation Skills".

I hope this paper is helpful to everyone's asp. net programming.


Related articles: