asp.net generate verification code (Chinese only)

  • 2020-05-17 05:10:47
  • OfStack

 
using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Text; // Add reference  
using System.Drawing; // Add reference  
/// <summary> 
/// CheckCode_Ch  Summary of  
/// </summary> 
public class CheckCode_Ch 
{ 
public CheckCode_Ch() 
{ 
// 
// TODO:  Add the constructor logic here  
// 
} 
private static object[] CreateString() 
{ 
// define 1 An array stores the constituent elements of the Chinese character encoding  
string[] str = new string[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; 
Random ran = new Random(); // define 1 Random number objects  
object[] bytes = new object[4]; 
for (int i = 0; i < 4; i++) 
{ 
// Get location code number 1 position  
int ran1 = ran.Next(11, 14); 
string str1 = str[ran1].Trim(); 
// Get location code number 2 Bit and prevent data duplication  
ran = new Random(ran1 * unchecked((int)DateTime.Now.Ticks) + i); 
int ran2; 
if (ran1 == 13) 
{ 
ran2 = ran.Next(0, 7); 
} 
else 
{ 
ran2 = ran.Next(0, 16); 
} 
string str2 = str[ran2].Trim(); 
// Get location code number 3 position  
ran = new Random(ran2 * unchecked((int)DateTime.Now.Ticks) + i); 
int ran3 = ran.Next(10, 16); 
string str3 = str[ran3].Trim(); 
// Get location code number 4 position  
ran = new Random(ran3 * unchecked((int)DateTime.Now.Ticks) + i); 
int ran4; 
if (ran3 == 10) 
{ 
ran4 = ran.Next(1, 16); 
} 
else if (ran3 == 15) 
{ 
ran4 = ran.Next(0, 15); 
} 
else 
{ 
ran4 = ran.Next(0, 16); 
} 
string str4 = str[ran4].Trim(); 
// Define the byte variable store generated random Chinese character location code  
byte byte1 = Convert.ToByte(str1 + str2, 16); 
byte byte2 = Convert.ToByte(str3 + str4, 16); 
byte[] stradd = new byte[] { byte1, byte2 }; 
// Puts the resulting Chinese character bytes into an array  
bytes.SetValue(stradd, i); 
} 
return bytes; 
} 
private static string GetString() 
{ 
Encoding gb = Encoding.GetEncoding("gb2312"); 
object[] bytes = CreateString(); 
// Chinese characters are decoded according to Chinese character bytes  
string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[]))); 
string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[]))); 
string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[]))); 
string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[]))); 
string str = str1 + str2 + str3 + str4; 
HttpContext.Current.Response.Cookies.Add(new HttpCookie("CheckCode", str)); 
return str; 
} 
public static void GraphicsImage() 
{ 
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((GetString().Length * 22.5)), 22); 
Graphics g = Graphics.FromImage(image); // Create a canvas  
try 
{ 
// Generative random generator  
Random random = new Random(); 
// Empty the image background color  
g.Clear(Color.White); 
// Draw the background noise line of the picture  
for (int i = 0; i < 1; 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.Black), x1, y1, x2, y2); 
} 
Font font = new System.Drawing.Font("Couriew New", 12, System.Drawing.FontStyle.Bold); 
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(GetString(), font, brush, 2, 2); 
// Draw the foreground noise point of the picture  
for (int i = 0; i < 50; 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(); 
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
HttpContext.Current.Response.ClearContent(); 
HttpContext.Current.Response.ContentType = "image/Gif"; 
HttpContext.Current.Response.BinaryWrite(ms.ToArray()); 
} 
catch (Exception ms) 
{ 
HttpContext.Current.Response.Write(ms.Message); 
} 
} 
} 

Step 2: create a page that references the class library ChineseCheckCode.aspx.
 
using System; 
using System.Collections; 
using System.Configuration; 
using System.Data; 
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; 
public partial class UserValidator_ChineseCheckCode : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
CheckCode_Ch.GraphicsImage(); // Call method generation 4 Bit character verification code  
} 
} 

Step 3 refers to the captcha page
 
<asp:TextBox ID="Validator" runat="server" Width="150px" ></asp:TextBox> 
<img id="Img1" alt=" Can't see, please click on me! " onclick="this.src=this.src+'?'" src="ChineseCheckCode.aspx" 
style="width: 75px; height: 24px" align="left" /> 
<asp:ImageButton ID="imgBtnLogin" runat="server" ImageUrl="~/Images/Login.GIF" 
OnClick="imgBtnLogin_Click" /> 

The background to judge
 
protected void imgBtnLogin_Click(object sender, ImageClickEventArgs e) 
{ 
HttpCookie cookie = Request.Cookies["CheckCode"]; 
if (cookie.Value == this.Validator.Text.Trim()) 
{ 
// .  
} 
else 
{ 
Response.Write("<script>alert(' Verification code input error, please re-enter! ');Location='ChineseCodeValidator.aspx'</script>"); 
return; 
} 
} 

The above verification code generates 4 bits, please make appropriate modifications according to the situation.
Now it summarizes the verification code technology to generate pure Numbers, alphanumeric mixing, and pure Chinese characters. I hope it will be helpful to you.

Related articles: