>  기사  >  백엔드 개발  >  asp.net은 확인 코드(순수한 숫자)를 생성합니다.

asp.net은 확인 코드(순수한 숫자)를 생성합니다.

高洛峰
高洛峰원래의
2017-01-13 14:54:291092검색

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

클래스를 참조하는 다른 페이지 checkCode.aspx를 만듭니다. 프런트엔드에 아무것도 작성할 필요가 없습니다. 우리가 만든 클래스의 DrawImage() 메서드만 참조하면 됩니다. 백그라운드에서.

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

이제 인증 코드가 필요한 페이지에서 checkCode.aspx 페이지를 인용할 수 있습니다.
프런트 데스크

<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" />

백엔드 판단

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

위 코드를 실제 상황에 맞게 적절하게 수정해주세요.

asp.net 생성 인증 코드(순수)와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.