Heim  >  Artikel  >  Backend-Entwicklung  >  asp.net generiert einen Bestätigungscode (reine Zahlen)

asp.net generiert einen Bestätigungscode (reine Zahlen)

高洛峰
高洛峰Original
2017-01-13 14:54:291017Durchsuche

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> 
public class CheckCode 
{ 
public CheckCode() 
{ 
// 
// TODO: 在此处添加构造函数逻辑 
// 
} 
public static void DrawImage() 
{ 
CheckCode img = new CheckCode(); 
HttpContext.Current.Session["CheckCode"] = img.RndNum(4); 
img.checkCodes(HttpContext.Current.Session["CheckCode"].ToString()); 
} 
/// <summary> 
/// 生成验证图片 
/// </summary> 
/// <param name="checkCode">验证字符</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); 
//定义颜色 
Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; 
//定义字体 
string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" }; 
Random rand = new Random(); 
//随机输出噪点 
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); 
} 
//输出不同字体和颜色的验证码字符 
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); 
} 
//画一个边框 
g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1); 
//输出到浏览器 
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> 
/// 生成随机的字母 
/// </summary> 
/// <param name="VcodeNum">生成字母的个数</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(&#39;,&#39;); 
string VNum = ""; //由于字符串很短,就不用StringBuilder了 
int temp = -1; //记录上次随机数值,尽量避免生产几个一样的随机数 
//采用一个简单的算法以保证生成随机数的不同 
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; 
} 
}

Erstellen Sie eine Seite checkCode.aspx, die auf die Klasse verweist. Sie müssen nichts in das Frontend schreiben. Sie können einfach auf die DrawImage()-Methode der Klasse verweisen Wir haben im Hintergrund erstellt.

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(); 
} 
}

Nachfolgend können wir die Seite checkCode.aspx auf der Seite zitieren, die einen Bestätigungscode erfordert.
Rezeption

<asp:TextBox ID="Validator" runat="server" Width="150px" ></asp:TextBox> 
<img id="Img1" alt="看不清,请点击我!" onclick="this.src=this.src+&#39;?&#39;" src="checkCode.aspx" 
style="width: 73px; height: 22px" align="left" /> 
<asp:ImageButton ID="imgBtnLogin" runat="server" ImageUrl="~/Images/Login.GIF" 
OnClick="imgBtnLogin_Click" />

Backend-Urteil

protected void imgBtnLogin_Click(object sender, ImageClickEventArgs e) 
{ 
if(this.Validator.Text==Session["CheckCode"].ToString()) 
{ 
//。。。。 
} 
else 
{ 
Response.Write("<script>alert(&#39;验证码输入错误,请重新输入!&#39;);Location=&#39;MumberValidate.aspx&#39;</script>"); 
return; 
} 
}

Bitte ändern Sie den obigen Code entsprechend der tatsächlichen Situation.

Weitere Artikel zum Generieren von Bestätigungscodes (reine Zahlen) durch asp.net finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn