Example of generating verification code function realized by asp.net [demo source code attached]

Time:2021-6-9

This paper introduces the function of generating captcha by asp.net. The details are as follows:

The principle of generating verification code: generate random characters, generate the characters into pictures, and store them in session at the same time, and then verify whether the content entered by the user is consistent with the verification code in session.

Rendering: users can click to switch the captcha information.

General handler: checkcodehandler.cs

<%@ WebHandler Language="C#" Class="CheckCodeHandler" %>
using System;
using System.Web;
using System.Text;
using System.Drawing;
using System.Web.SessionState;
public class CheckCodeHandler : IHttpHandler,IRequiresSessionState
{
  //Character set for generating captcha
  public string charcode = "2,3,4,5,6,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,R,S,U,W,X,Y,a,b,c,d,e,f,g,h,j,k,m,n,p,r,s,u,w,x,y";
  public void ProcessRequest (HttpContext context) {
    string validateCode = CreateRandomCode(4);
    context.Session["ValidateCode"] = validateCode;// Save the verification code to the session
    CreateCodeImage(validateCode, context);
  }
  public bool IsReusable {
    get {
      return false;
    }
  }
  /// <summary>
  ///Generate verification code
  /// </summary>
  ///< param name = "n" > number of captcha < / param >
  ///< returns > captcha string < / returns >
  public string CreateRandomCode(int n)
  {
    string[] CharArray = charcode.Split(',');// Converts a string to an array of characters
    string randomCode = "";
    int temp = -1;
    Random rand = new Random();
    for (int i = 0; i < n; i++)
    {
      if (temp != -1)
      {
        rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
      }
      int t = rand.Next(CharArray.Length - 1);
      if (temp != -1 && temp == t)
      {
        return CreateRandomCode(n);
      }
      temp = t;
      randomCode += CharArray[t];
    }
    return randomCode;
  }
  public void CreateCodeImage(string checkCode, HttpContext context)
  {
    int iwidth = (int)(checkCode.Length * 13);
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
    Graphics g = Graphics.FromImage(image);
    Font f = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Italic | System.Drawing.FontStyle.Bold));
    //Foreground
    Brush b = new System.Drawing.SolidBrush(Color.Black);
    //Background color
    g.Clear(Color.White);
    //Fill in text
    g.DrawString(checkCode, f, b, 0, 1);
    //Random line
    Pen linePen = new Pen(Color.Gray, 0);
    Random rand = new Random();
    for (int i = 0; i < 5; i++)
    {
      int x1 = rand.Next(image.Width);
      int y1 = rand.Next(image.Height);
      int x2 = rand.Next(image.Width);
      int y2 = rand.Next(image.Height);
      g.DrawLine(linePen, x1, y1, x2, y2);
    }
    //Random point
    for (int i = 0; i < 30; i++)
    {
      int x = rand.Next(image.Width);
      int y = rand.Next(image.Height);
      image.SetPixel(x, y, Color.Gray);
    }
    //Borders
    g.DrawRectangle(new Pen(Color.Gray), 0, 0, image.Width - 1, image.Height - 1);
    //Output picture
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    context.Response.ClearContent();
    context.Response.ContentType = "image/jpeg";
    context.Response.BinaryWrite(ms.ToArray());
    g.Dispose();
    image.Dispose();
  }
}

Packaged as a class library: validatenumber.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Web.UI;
using System.Drawing.Drawing2D;
using System.IO;
using System.Drawing.Imaging;
/// <summary>
///Validatenumber generate verification code
/// </summary>
public class ValidateNumber
{
  //Character set for generating captcha (remove confusing characters)
  private string charcode = "2,3,4,5,6,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,R,S,U,W,X,Y,a,b,c,d,e,f,g,h,j,k,m,n,p,r,s,u,w,x,y";
  /// <summary>
  ///Maximum length of captcha
  /// </summary>
  public int MaxLength
  {
    get { return 10; }
  }
  /// <summary>
  ///Minimum length of captcha
  /// </summary>
  public int MinLength
  {
    get { return 1; }
  }
  /// <summary>
  ///Generate verification code
  /// </summary>
  ///< param name = "length" > specifies the length of the captcha < / param >
  /// <returns></returns>
  public string CreateValidateNumber(int length)
  {
    string[] CharArray = charcode.Split(',');// Converts a string to an array of characters
    string randomCode = "";
    int temp = -1;
    Random rand = new Random();
    for (int i = 0; i < length; i++)
    {
      if (temp != -1)
      {
        rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
      }
      int t = rand.Next(CharArray.Length - 1);
      if (temp != -1 && temp == t)
      {
        return CreateValidateNumber(length);
      }
      temp = t;
      randomCode += CharArray[t];
    }
    return randomCode;
  }
  /// <summary>
  ///Create captcha image
  /// </summary>
  ///< param name = "context" > context object < / param >
  ///< param name = "validatenum" > captcha < / param >
  public void CreateValidateGraphic(HttpContext context,string validateNum)
  {
    int iwidth = (int)(validateNum.Length * 14);
    Bitmap image = new Bitmap(iwidth, 22);
    Graphics g = Graphics.FromImage(image);
    try
    {
      //Generating random generators
      Random random = new Random();
      //Clear image background color
      g.Clear(Color.White);
      //Draw interference lines in pictures
      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, y1, x2, y2);
      }
      Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
      LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
       Color.Blue, Color.DarkRed, 1.2f, true);
      g.DrawString(validateNum, font, brush, 3, 2);
      //Draw foreground interference points of 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);
      //Save picture data
      MemoryStream stream = new MemoryStream();
      image.Save(stream, ImageFormat.Jpeg);
      //Output picture
      context.Response.Clear();
      context.Response.ContentType = "image/jpeg";
      context.Response.BinaryWrite(stream.ToArray());
    }
    finally
    {
      g.Dispose();
      image.Dispose();
    }
  }
  /// <summary>
  ///Get the length of the captcha image
  /// </summary>
  ///< param name = "validatenumlength" > length of captcha < / param >
  /// <returns></returns>
  public static int GetImageWidth(int validateNumLength)
  {
    return (int)(validateNumLength * 14);
  }
  /// <summary>
  ///Get the height of the captcha image
  /// </summary>
  /// <returns></returns>
  public static double GetImageHeight()
  {
    return 22;
  }
}

Attached:Complete instance code click hereDownload from our website

For more information about asp.net, readers who are interested in it can see the special topic of this website:《Summary of the skills of operating JSON with asp.net》、《Summary of asp.net string operation skills》、《Asp.net operation XML skill summary》、《Summary of asp.net file operation skills》、《Summary of asp.net Ajax skills》And《Summary of asp.net cache operation skills》。

I hope that this paper will be helpful to asp.net programming.