asp.net verification code generation, refresh and verification

高洛峰
Release: 2017-01-13 13:57:45
Original
1584 people have browsed it

Verification code technology is set up to prevent brute force cracking, etc. Nowadays, general website registrations and other websites provide verification code functions, especially Tencent’s long list. The article refers to other people's code. Once you have it, there is no need to write anymore. You can read it. However, I found two PageLoad problems during testing. Just two comments. Namespaces were also modified. At the same time, complete verification instructions are provided:
1 Create a new VerifyCode.aspx
cs file code as follows:

using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Web; 
using System.Web.SessionState; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.HtmlControls; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Drawing.Text; 
/**///// <summary> 
/// 页面验证码程序 
/// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx"> 
/// </summary> 
public partial class VerifyCode : System.Web.UI.Page 
...{ 
static string[] FontItems = new string[] ...{ "Arial", 
"Helvetica", 
"Geneva", 
"sans-serif", 
"Verdana" 
}; 
static Brush[] BrushItems = new Brush[] ...{ Brushes.OliveDrab, 
Brushes.ForestGreen, 
Brushes.DarkCyan, 
Brushes.LightSlateGray, 
Brushes.RoyalBlue, 
Brushes.SlateBlue, 
Brushes.DarkViolet, 
Brushes.MediumVioletRed, 
Brushes.IndianRed, 
Brushes.Firebrick, 
Brushes.Chocolate, 
Brushes.Peru, 
Brushes.Goldenrod 
}; 
static string[] BrushName = new string[] ...{ "OliveDrab", 
"ForestGreen", 
"DarkCyan", 
"LightSlateGray", 
"RoyalBlue", 
"SlateBlue", 
"DarkViolet", 
"MediumVioletRed", 
"IndianRed", 
"Firebrick", 
"Chocolate", 
"Peru", 
"Goldenrod" 
}; 
private static Color BackColor = Color.White; 
private static Pen BorderColor = Pens.DarkGray; 
private static int Width = 52; 
private static int Height = 21; 
private Random _random; 
private string _code; 
private int _brushNameIndex; 
override protected void OnInit(EventArgs e) 
...{ 
// 
// CODEGEN: This call is required by the ASP.NET Web Form Designer. 
// 
//InitializeComponent(); 
//base.OnInit(e); 
} 
/**//**//**//// <summary> 
/// Required method for Designer support - do not modify 
/// the contents of this method with the code editor. 
/// </summary> 
private void InitializeComponent() 
...{ 
//this.Load += new System.EventHandler(this.Page_Load); 
} 
/**//// <summary> 
/// 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
public void Page_Load(object sender, System.EventArgs e) 
...{ 
if (!IsPostBack) 
...{ 
// 
// TODO : initialize 
// 
this._random = new Random(); 
this._code = GetRandomCode(); 
// 
// TODO : use Session["code"] save the VerifyCode 
// 
Session["code"] = this._code; 
// 
// TODO : output Image 
// 
this.SetPageNoCache(); 
this.OnPaint(); 
} 
} 
/**//**//**//// <summary> 
/// 设置页面不被缓存 
/// </summary> 
private void SetPageNoCache() 
...{ 
Response.Buffer = true; 
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1); 
Response.Expires = 0; 
Response.CacheControl = "no-cache"; 
Response.AppendHeader("Pragma","No-Cache"); 
} 
/**//**//**//// <summary> 
/// 取得一个 4 位的随机码 
/// </summary> 
/// <returns></returns> 
private string GetRandomCode() 
...{ 
return Guid.NewGuid().ToString().Substring(0, 4); 
} 
/**//**//**//// <summary> 
/// 随机取一个字体 
/// </summary> 
/// <returns></returns> 
private Font GetFont() 
...{ 
int fontIndex = _random.Next(0, FontItems.Length); 
FontStyle fontStyle = GetFontStyle(_random.Next(0, 2)); 
return new Font(FontItems[fontIndex], 12, fontStyle); 
} 
/**//**//**//// <summary> 
/// 取一个字体的样式 
/// </summary> 
/// <param name="index"></param> 
/// <returns></returns> 
private FontStyle GetFontStyle(int index) 
...{ 
switch (index) 
...{ 
case 0: 
return FontStyle.Bold; 
case 1: 
return FontStyle.Italic; 
default: 
return FontStyle.Regular; 
} 
} 
/**//**//**//// <summary> 
/// 随机取一个笔刷 
/// </summary> 
/// <returns></returns> 
private Brush GetBrush() 
...{ 
int brushIndex = _random.Next(0, BrushItems.Length); 
_brushNameIndex = brushIndex; 
return BrushItems[brushIndex]; 
} 
/**//**//**//// <summary> 
/// 绘画事件 
/// </summary> 
private void OnPaint() 
...{ 
Bitmap objBitmap = null; 
Graphics g = null; 
try 
...{ 
objBitmap = new Bitmap(Width, Height); 
g = Graphics.FromImage(objBitmap); 
Paint_Background(g); 
Paint_Text(g); 
Paint_TextStain(objBitmap); 
Paint_Border(g); 
objBitmap.Save(Response.OutputStream, ImageFormat.Gif); 
Response.ContentType = "image/gif"; 
} 
catch ...{} 
finally 
...{ 
if (null != objBitmap) 
objBitmap.Dispose(); 
if (null != g) 
g.Dispose(); 
} 
} 
/**//**//**//// <summary> 
/// 绘画背景颜色 
/// </summary> 
/// <param name="g"></param> 
private void Paint_Background(Graphics g) 
...{ 
g.Clear(BackColor); 
} 
/**//**//**//// <summary> 
/// 绘画边框 
/// </summary> 
/// <param name="g"></param> 
private void Paint_Border(Graphics g) 
...{ 
g.DrawRectangle(BorderColor, 0, 0, Width - 1, Height - 1); 
} 
/**//**//**//// <summary> 
/// 绘画文字 
/// </summary> 
/// <param name="g"></param> 
private void Paint_Text(Graphics g) 
...{ 
g.DrawString(_code, GetFont(), GetBrush(), 3, 1); 
} 
/**//**//**//// <summary> 
/// 绘画文字噪音点 
/// </summary> 
/// <param name="g"></param> 
private void Paint_TextStain(Bitmap b) 
...{ 
for (int n=0; n<30; n++) 
...{ 
int x = _random.Next(Width); 
int y = _random.Next(Height); 
b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex])); 
} 
} 
}
Copy after login

2 Page reference:

Generally, the refresh function needs to be provided at the same time (change one if you can't see clearly), the code is as follows
Refresh verification code
If a master page is used, use the following code:
<%----%>
Refresh verification code
The javascript corresponding to the hyperlink is as follows:

3 Judgment Verification
The above code stores the verification code in the Session and is marked with code. Read the code Session["code"].ToString();
In use, we only need to compare whether Session["code"].ToString() and the string entered in the text box (TextBoxCode.Text) are the same. judge.
if(Session["code"].ToString().Trim().Equals(TextBoxCode.Text.Trim()))
...{
Response.Write("Success");
}
Test passed!

For more asp.net verification code generation and refresh and verification related articles, please pay attention to the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!