asp.net generate captcha (pure Numbers)

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

CheckCode.cs
 
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.Drawing; 
/// <summary> 
/// CheckCode  Summary of  
/// </summary> 
public class CheckCode 
{ 
public CheckCode() 
{ 
// 
// TODO:  Add the constructor logic here  
// 
} 
public static void DrawImage() 
{ 
CheckCode img = new CheckCode(); 
HttpContext.Current.Session["CheckCode"] = img.RndNum(4); 
img.checkCodes(HttpContext.Current.Session["CheckCode"].ToString()); 
} 
/// <summary> 
///  Generate validation images  
/// </summary> 
/// <param name="checkCode"> Verify the characters </param> 
private void checkCodes(string checkCode) 
{ 
int iwidth = (int)(checkCode.Length * 13); 
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23); 
Graphics g = Graphics.FromImage(image); 
g.Clear(Color.White); 
// Define the color  
Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; 
// Define the font  
string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", " Song typeface " }; 
Random rand = new Random(); 
// Random output noise  
for (int i = 0; i < 50; i++) 
{ 
int x = rand.Next(image.Width); 
int y = rand.Next(image.Height); 
g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1); 
} 
// Output captcha characters in different fonts and colors  
for (int i = 0; i < checkCode.Length; i++) 
{ 
int cindex = rand.Next(7); 
int findex = rand.Next(5); 
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold); 
Brush b = new System.Drawing.SolidBrush(c[cindex]); 
int ii = 4; 
if ((i + 1) % 2 == 0) 
{ 
ii = 2; 
} 
g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii); 
} 
// draw 1 A border  
g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1); 
// Output to the browser  
System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
HttpContext.Current.Response.ClearContent(); 
//Response.ClearContent(); 
HttpContext.Current.Response.ContentType = "image/Jpeg"; 
HttpContext.Current.Response.BinaryWrite(ms.ToArray()); 
g.Dispose(); 
image.Dispose(); 
} 
/// <summary> 
///  Generate random letters  
/// </summary> 
/// <param name="VcodeNum"> Number of generated letters </param> 
/// <returns>string</returns> 
private string RndNum(int VcodeNum) 
{ 
string Vchar = "0,1,2,3,4,5,6,7,8,9"; 
string[] VcArray = Vchar.Split(','); 
string VNum = ""; // Because the string is so short, you don't have to use it StringBuilder the  
int temp = -1; // Record the last random number and try to avoid producing several 1 Sample random number  
// using 1 A simple algorithm to ensure that the generation of random Numbers is different  
Random rand = new Random(); 
for (int i = 1; i < VcodeNum + 1; i++) 
{ 
if (temp != -1) 
{ 
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks)); 
} 
int t = rand.Next(VcArray.Length); 
if (temp != -1 && temp == t) 
{ 
return RndNum(VcodeNum); 
} 
temp = t; 
VNum += VcArray[t]; 
} 
return VNum; 
} 
} 

Create another page that references the class checkCode.aspx. The foreground doesn't have to write anything, but the background can refer to the DrawImage() method of the class we created.
 
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
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; 
public partial class checkCode : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
CheckCode.DrawImage(); 
} 
} 

Now we can refer to the checkCode.aspx page on the page where the captcha is required.
The front desk
 
<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="checkCode.aspx" 
style="width: 73px; height: 22px" 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) 
{ 
if(this.Validator.Text==Session["CheckCode"].ToString()) 
{ 
// .  
} 
else 
{ 
Response.Write("<script>alert(' Verification code input error, please re-enter! ');Location='MumberValidate.aspx'</script>"); 
return; 
} 
} 

Please modify the above code according to the actual situation.

Related articles: