一個(gè)簡(jiǎn)單的ASP.NET驗(yàn)證碼
本文實(shí)例為大家分享了ASP.NET驗(yàn)證碼的具體代碼,供大家參考,具體內(nèi)容如下
我主要是看到干擾線了,一個(gè)驗(yàn)證碼里面要是沒(méi)有干擾線什么的,至少得在噪點(diǎn)和隨機(jī)碼的排版上下工夫:
/// <summary> /// 驗(yàn)證碼生成類 /// </summary> public class verify_code : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { int codeW = 80; int codeH = 22; int fontSize = 16; string chkCode = string.Empty; //顏色列表,用于驗(yàn)證碼、噪線、噪點(diǎn) Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue }; //字體列表,用于驗(yàn)證碼 string[] font = { "Times New Roman", "Verdana", "Arial", "Gungsuh", "Impact" }; //驗(yàn)證碼的字符集,去掉了一些容易混淆的字符 char[] character = { '0', '1', '2', '3', '4', '5', '6', '8', '9' }; Random rnd = new Random(); //生成驗(yàn)證碼字符串 for (int i = 0; i < 4; i++) { chkCode += character[rnd.Next(character.Length)]; } //寫入Session context.Session["sys_verify_code"] = chkCode; //創(chuàng)建畫布 Bitmap bmp = new Bitmap(codeW, codeH); Graphics g = Graphics.FromImage(bmp); g.Clear(Color.White); //畫噪線 for (int i = 0; i < 4; i++) { int x1 = rnd.Next(codeW); int y1 = rnd.Next(codeH); int x2 = rnd.Next(codeW); int y2 = rnd.Next(codeH); Color clr = color[rnd.Next(color.Length)]; g.DrawLine(new Pen(clr), x1, y1, x2, y2); } //畫驗(yàn)證碼字符串 for (int i = 0; i < chkCode.Length; i++) { string fnt = font[rnd.Next(font.Length)]; Font ft = new Font(fnt, fontSize); Color clr = color[rnd.Next(color.Length)]; g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 18 + 2, (float)0); } //畫噪點(diǎn) for (int i = 0; i < 100; i++) { int x = rnd.Next(bmp.Width); int y = rnd.Next(bmp.Height); Color clr = color[rnd.Next(color.Length)]; bmp.SetPixel(x, y, clr); } //清除該頁(yè)輸出緩存,設(shè)置該頁(yè)無(wú)緩存 context.Response.Buffer = true; context.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); context.Response.Expires = 0; context.Response.CacheControl = "no-cache"; context.Response.AppendHeader("Pragma", "No-Cache"); //將驗(yàn)證碼圖片寫入內(nèi)存流,并將其以 "image/Png" 格式輸出 MemoryStream ms = new MemoryStream(); try { bmp.Save(ms, ImageFormat.Png); context.Response.ClearContent(); context.Response.ContentType = "image/Png"; context.Response.BinaryWrite(ms.ToArray()); } finally { //顯式釋放資源 bmp.Dispose(); g.Dispose(); } } public bool IsReusable { get { return false; } } }
基本驗(yàn)證生成代碼demo:
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Web; public partial class image : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string tmp = RndNum(4); HttpCookie a = new HttpCookie("ImageV", tmp); Response.Cookies.Add(a); this.ValidateCode(tmp); } private void ValidateCode(string VNum) { Bitmap Img = null; Graphics g = null; MemoryStream ms = null; int gheight = VNum.Length * 12; Img = new Bitmap(gheight, 25); g = Graphics.FromImage(Img); //背景顏色 g.Clear(Color.White); //文字字體 Font f = new Font("Arial Black", 10); //文字顏色 SolidBrush s = new SolidBrush(Color.Black); g.DrawString(VNum, f, s, 3, 3); ms = new MemoryStream(); Img.Save(ms, ImageFormat.Jpeg); Response.ClearContent(); Response.ContentType = "image/Jpeg"; Response.BinaryWrite(ms.ToArray()); g.Dispose(); Img.Dispose(); Response.End(); } private string RndNum(int VcodeNum) { string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" + ",q,r,s,t,u,v,w,x,y,z"; string[] VcArray = Vchar.Split(new Char[] { ',' }); string VNum = ""; 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(35); if (temp != -1 && temp == t) { return RndNum(VcodeNum); } temp = t; VNum += VcArray[t]; } return VNum; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET?MVC5網(wǎng)站開發(fā)之用戶資料的修改和刪除3(七)
這篇文章主要為大家詳細(xì)介紹了ASP.NET?MVC5網(wǎng)站開發(fā)之用戶資料的修改和刪除,感興趣的小伙伴們可以參考一下2016-08-08Asp.NET MVC中使用SignalR實(shí)現(xiàn)推送功能
這篇文章主要為大家詳細(xì)介紹了Asp.NET MVC 中使用 SignalR 實(shí)現(xiàn)推送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10asp.net下降文本格式數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中的代碼
導(dǎo)入文本格式數(shù)據(jù)到數(shù)據(jù)庫(kù)中的代碼,需要的朋友可以參考下。2010-05-05aspx超強(qiáng)木馬查殺與防范(web網(wǎng)馬)
下面代碼是一個(gè)aspx超強(qiáng)木馬,功能很多,大家在服務(wù)器上見到一定要小心2013-12-12使用updatepanel局部刷新實(shí)現(xiàn)注冊(cè)時(shí)對(duì)用戶名的檢測(cè)示例
這篇文章主要介紹了使用updatepanel局部刷新實(shí)現(xiàn)注冊(cè)時(shí)對(duì)用戶名的檢測(cè)示例,需要的朋友可以參考下2014-03-03C#中遍歷各類數(shù)據(jù)集合的方法總結(jié)
C#中遍歷各類數(shù)據(jù)集合的方法,這里自己做下總結(jié):枚舉類型、遍歷ArrayList(Queue、Stack)、Winform窗體中的控件、HashTable哈希表等等,具體祥看下文2013-05-05.NET?Core企業(yè)微信開發(fā)接口回調(diào)配置
這篇文章介紹了.NET?Core企業(yè)微信回調(diào)配置的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Asp.Net Core輕量級(jí)Aop解決方案:AspectCore
這篇文章主要介紹了Asp.Net Core輕量級(jí)Aop解決方案:AspectCore,需要的朋友可以參考下2017-06-06