這篇文章主要介紹ASP.NET驗(yàn)證碼如何生成,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
網(wǎng)站設(shè)計(jì)、做網(wǎng)站的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。第一步:隨機(jī)出一系統(tǒng)驗(yàn)證碼的數(shù)字或字母,順便把隨機(jī)生成的數(shù)字或字母寫入Cookies 或者 Session。
第二步:用第一步隨機(jī)出來(lái)的數(shù)字或字母來(lái)合成圖片。
可以看出來(lái)驗(yàn)證碼的復(fù)雜度主要是第二步來(lái)完成,你可以根據(jù)自己所要的復(fù)雜度來(lái)設(shè)定。
我們一起來(lái)看看:
第一步:隨機(jī)生成數(shù)字或字母的方法
/// <summary> /// 生成驗(yàn)證碼的隨機(jī)數(shù) /// </summary> /// <returns>返回五位隨機(jī)數(shù)</returns> private string GenerateCheckCode() { int number; char code; string checkCode = String.Empty; Random random = new Random(); for (int i = 0; i < 5; i++)//可以任意設(shè)定生成驗(yàn)證碼的位數(shù) { number = random.Next(); if (number % 2 == 0) code = (char)('0' + (char)(number % 10)); else code = (char)('A' + (char)(number % 26)); checkCode += code.ToString(); } Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));//寫入COOKIS Session["CheckCode"] = checkCode; //寫入Session,可以任意選一下 return checkCode; }
第二步:生成圖片
/// <summary> /// 生成驗(yàn)證碼圖片 /// </summary> /// <param name="checkCode"></param> private void CreateCheckCodeImage(string checkCode) { if (checkCode == null || checkCode.Trim() == String.Empty) return; Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22); Graphics g = Graphics.FromImage(image); try { //生成隨機(jī)生成器 Random random = new Random(); //清空?qǐng)D片背景色 g.Clear(Color.White); //畫圖片的背景噪音線 for (int i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic)); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, brush, 2, 2); //畫圖片的前景噪音點(diǎn) for (int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //畫圖片的邊框線 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); MemoryStream ms = new MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray()); } finally {//釋放對(duì)象資源 g.Dispose(); image.Dispose(); }
*完整程序
先在VS2005里面的項(xiàng)目里面添加一個(gè) checkCode.aspx 文件,在checkCode.aspx.cs 代碼文件中添加如下完整代碼
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; using System.Drawing; using System.IO; using System.Drawing.Drawing2D; public partial class checkCode : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { CreateCheckCodeImage(GenerateCheckCode());//調(diào)用下面兩個(gè)方法; } /// <summary> /// 生成驗(yàn)證碼的隨機(jī)數(shù) /// </summary> /// <returns>返回五位隨機(jī)數(shù)</returns> private string GenerateCheckCode() { int number; char code; string checkCode = String.Empty; Random random = new Random(); for (int i = 0; i < 5; i++)//可以任意設(shè)定生成驗(yàn)證碼的位數(shù) { number = random.Next(); if (number % 2 == 0) code = (char)('0' + (char)(number % 10)); else code = (char)('A' + (char)(number % 26)); checkCode += code.ToString(); } Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));//寫入COOKIS Session["CheckCode"] = checkCode; //寫入Session,可以任意選一下 return checkCode; } /// <summary> /// 生成驗(yàn)證碼圖片 /// </summary> /// <param name="checkCode"></param> private void CreateCheckCodeImage(string checkCode) { if (checkCode == null || checkCode.Trim() == String.Empty) return; Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22); Graphics g = Graphics.FromImage(image); try { //生成隨機(jī)生成器 Random random = new Random(); //清空?qǐng)D片背景色 g.Clear(Color.White); //畫圖片的背景噪音線 for (int i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic)); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, brush, 2, 2); //畫圖片的前景噪音點(diǎn) for (int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //畫圖片的邊框線 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); MemoryStream ms = new MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray()); } finally {//釋放對(duì)象資源 g.Dispose(); image.Dispose(); } } }
上面生成驗(yàn)證碼的頁(yè)面都做好了,我們來(lái)調(diào)用看看:
在你需要用到驗(yàn)證碼的地方加了Image控件
<asp:Image ID="Image1" runat="server" ImageUrl="~/checkCode.aspx" />
這樣驗(yàn)證碼就會(huì)顯示到Image控件上面了!
顯示弄好了,當(dāng)然我們要判斷一下用戶的輸入是否正確!
只要我們?nèi)〉糜脩糨斎氲闹蹈鶦ookis或者Session對(duì)比就OK了
取Cookies的值Request.Cookies["CheckCode"].Value
取Session的值Session["CheckCode"].ToString() ?。ê孟扰袛郤ession是否空)
如果不要區(qū)分大小寫的話,就把用戶輸入的值和Cookies或Session的值都轉(zhuǎn)成大寫或都小寫
附用法
protected void Button1_Click(object sender, EventArgs e) { if (Request.Cookies["CheckCode"].Value == TextBox1.Text.Trim().ToString()) { Response.Write("Cookies is right"); } else { Response.Write("Cookies is wrong"); } if (Session["CheckCode"] != null) { if (Session["CheckCode"].ToString().ToUpper() == TextBox1.Text.Trim().ToString().ToUpper()) //這樣寫可以不能區(qū)分大小寫 { Response.Write("Session is right"); } else { Response.Write("Session is wrong"); } } }
以上是“ASP.NET驗(yàn)證碼如何生成”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站名稱:ASP.NET驗(yàn)證碼如何生成-創(chuàng)新互聯(lián)
URL地址:http://jinyejixie.com/article24/isoce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、標(biāo)簽優(yōu)化、網(wǎng)站收錄、App開(kāi)發(fā)、虛擬主機(jī)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容