這篇文章主要介紹了ASP.NET實現(xiàn)的生成驗證碼功能,結(jié)合實例形式較為詳細的分析了asp.net生成驗證碼的原理、步驟與相關實現(xiàn)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
本文實例講述了ASP.NET實現(xiàn)的生成驗證碼功能。分享給大家供大家參考,具體如下:
生成驗證碼原理:產(chǎn)生隨機字符,并將字符生成為圖片,同時儲存到Session里去,然后驗證用戶輸入的內(nèi)容是否與Session中的驗證碼相符即可。
效果圖:用戶可以點擊切換驗證碼信息。
一般處理程序:CheckCodeHandler.cs
<%@ WebHandler Language="C#" Class="CheckCodeHandler" %> using System; using System.Web; using System.Text; using System.Drawing; using System.Web.SessionState; public class CheckCodeHandler : IHttpHandler,IRequiresSessionState { //產(chǎn)生驗證碼的字符集 public string charcode = "2,3,4,5,6,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,R,S,U,W,X,Y,a,b,c,d,e,f,g,h,j,k,m,n,p,r,s,u,w,x,y"; public void ProcessRequest (HttpContext context) { string validateCode = CreateRandomCode(4); context.Session["ValidateCode"] = validateCode;//將驗證碼保存到session中 CreateCodeImage(validateCode, context); } public bool IsReusable { get { return false; } } /// <summary> /// 生成驗證碼 /// </summary> /// <param name="n">驗證碼個數(shù)</param> /// <returns>驗證碼字符串</returns> public string CreateRandomCode(int n) { string[] CharArray = charcode.Split(',');//將字符串轉(zhuǎn)換為字符數(shù)組 string randomCode = ""; int temp = -1; Random rand = new Random(); for (int i = 0; i < n; i++) { if (temp != -1) { rand = new Random(i * temp * ((int)DateTime.Now.Ticks)); } int t = rand.Next(CharArray.Length - 1); if (temp != -1 && temp == t) { return CreateRandomCode(n); } temp = t; randomCode += CharArray[t]; } return randomCode; } public void CreateCodeImage(string checkCode, HttpContext context) { int iwidth = (int)(checkCode.Length * 13); System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20); Graphics g = Graphics.FromImage(image); Font f = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Italic | System.Drawing.FontStyle.Bold)); // 前景色 Brush b = new System.Drawing.SolidBrush(Color.Black); // 背景色 g.Clear(Color.White); // 填充文字 g.DrawString(checkCode, f, b, 0, 1); // 隨機線條 Pen linePen = new Pen(Color.Gray, 0); Random rand = new Random(); for (int i = 0; i < 5; i++) { int x1 = rand.Next(image.Width); int y1 = rand.Next(image.Height); int x2 = rand.Next(image.Width); int y2 = rand.Next(image.Height); g.DrawLine(linePen, x1, y1, x2, y2); } // 隨機點 for (int i = 0; i < 30; i++) { int x = rand.Next(image.Width); int y = rand.Next(image.Height); image.SetPixel(x, y, Color.Gray); } // 邊框 g.DrawRectangle(new Pen(Color.Gray), 0, 0, image.Width - 1, image.Height - 1); // 輸出圖片 System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); context.Response.ClearContent(); context.Response.ContentType = "image/jpeg"; context.Response.BinaryWrite(ms.ToArray()); g.Dispose(); image.Dispose(); } }
封裝成類庫:ValidateNumber.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Drawing; using System.Web.UI; using System.Drawing.Drawing2D; using System.IO; using System.Drawing.Imaging; /// <summary> ///ValidateNumber 生成驗證碼 /// </summary> public class ValidateNumber { //產(chǎn)生驗證碼的字符集 (易混淆的字符去掉) private string charcode = "2,3,4,5,6,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,R,S,U,W,X,Y,a,b,c,d,e,f,g,h,j,k,m,n,p,r,s,u,w,x,y"; /// <summary> /// 驗證碼的最大長度 /// </summary> public int MaxLength { get { return 10; } } /// <summary> /// 驗證碼的最小長度 /// </summary> public int MinLength { get { return 1; } } /// <summary> /// 生成驗證碼 /// </summary> /// <param name="length">指定驗證碼的長度</param> /// <returns></returns> public string CreateValidateNumber(int length) { string[] CharArray = charcode.Split(',');//將字符串轉(zhuǎn)換為字符數(shù)組 string randomCode = ""; int temp = -1; Random rand = new Random(); for (int i = 0; i < length; i++) { if (temp != -1) { rand = new Random(i * temp * ((int)DateTime.Now.Ticks)); } int t = rand.Next(CharArray.Length - 1); if (temp != -1 && temp == t) { return CreateValidateNumber(length); } temp = t; randomCode += CharArray[t]; } return randomCode; } /// <summary> /// 創(chuàng)建驗證碼的圖片 /// </summary> /// <param name="context">context對象</param> /// <param name="validateNum">驗證碼</param> public void CreateValidateGraphic(HttpContext context,string validateNum) { int iwidth = (int)(validateNum.Length * 14); Bitmap image = new Bitmap(iwidth, 22); Graphics g = Graphics.FromImage(image); try { //生成隨機生成器 Random random = new Random(); //清空圖片背景色 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 Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic)); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(validateNum, font, brush, 3, 2); //畫圖片的前景干擾點 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); //保存圖片數(shù)據(jù) MemoryStream stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); //輸出圖片 context.Response.Clear(); context.Response.ContentType = "image/jpeg"; context.Response.BinaryWrite(stream.ToArray()); } finally { g.Dispose(); image.Dispose(); } } /// <summary> /// 得到驗證碼圖片的長度 /// </summary> /// <param name="validateNumLength">驗證碼的長度</param> /// <returns></returns> public static int GetImageWidth(int validateNumLength) { return (int)(validateNumLength * 14); } /// <summary> /// 得到驗證碼圖片的高度 /// </summary> /// <returns></returns> public static double GetImageHeight() { return 22; } }
以上是如何使用ASP.NET實現(xiàn)生成驗證碼功能的實例代碼的詳細內(nèi)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

華為手機如何實現(xiàn)雙微信登錄?隨著社交媒體的興起,微信已經(jīng)成為人們?nèi)粘I钪胁豢苫蛉钡臏贤üぞ咧?。然而,許多人可能會遇到一個問題:在同一部手機上同時登錄多個微信賬號。對于華為手機用戶來說,實現(xiàn)雙微信登錄并不困難,本文將介紹華為手機如何實現(xiàn)雙微信登錄的方法。首先,華為手機自帶的EMUI系統(tǒng)提供了一個很便利的功能——應用雙開。通過應用雙開功能,用戶可以在手機上同

編程語言PHP是一種用于Web開發(fā)的強大工具,能夠支持多種不同的編程邏輯和算法。其中,實現(xiàn)斐波那契數(shù)列是一個常見且經(jīng)典的編程問題。在這篇文章中,將介紹如何使用PHP編程語言來實現(xiàn)斐波那契數(shù)列的方法,并附上具體的代碼示例。斐波那契數(shù)列是一個數(shù)學上的序列,其定義如下:數(shù)列的第一個和第二個元素為1,從第三個元素開始,每個元素的值等于前兩個元素的和。數(shù)列的前幾個元

PHP游戲需求實現(xiàn)指南隨著互聯(lián)網(wǎng)的普及和發(fā)展,網(wǎng)頁游戲的市場也越來越火爆。許多開發(fā)者希望利用PHP語言來開發(fā)自己的網(wǎng)頁游戲,而實現(xiàn)游戲需求是其中一個關鍵步驟。本文將介紹如何利用PHP語言來實現(xiàn)常見的游戲需求,并提供具體的代碼示例。1.創(chuàng)建游戲角色在網(wǎng)頁游戲中,游戲角色是非常重要的元素。我們需要定義游戲角色的屬性,比如姓名、等級、經(jīng)驗值等,并提供方法來操作這些

如何在華為手機上實現(xiàn)微信分身功能隨著社交軟件的普及和人們對隱私安全的日益重視,微信分身功能逐漸成為人們關注的焦點。微信分身功能可以幫助用戶在同一臺手機上同時登錄多個微信賬號,方便管理和使用。在華為手機上實現(xiàn)微信分身功能并不困難,只需要按照以下步驟操作即可。第一步:確保手機系統(tǒng)版本和微信版本符合要求首先,確保你的華為手機系統(tǒng)版本已更新到最新版本,以及微信App

在當今的軟件開發(fā)領域中,Golang(Go語言)作為一種高效、簡潔、并發(fā)性強的編程語言,越來越受到開發(fā)者的青睞。其豐富的標準庫和高效的并發(fā)特性使它成為游戲開發(fā)領域的一個備受關注的選擇。本文將探討如何利用Golang來實現(xiàn)游戲開發(fā),并通過具體的代碼示例來展示其強大的可能性。1.Golang在游戲開發(fā)中的優(yōu)勢作為一種靜態(tài)類型語言,Golang在構(gòu)建大型游戲系統(tǒng)

word目錄生成錯亂怎么辦隨著科技的發(fā)展,電子文檔已經(jīng)成為我們?nèi)粘9ぷ骱蛯W習中不可或缺的一部分。而在編輯電子文檔時,尤其是長篇文章或論文中,目錄的生成是一個非常重要的步驟。目錄能夠方便讀者查找到文章的內(nèi)容和結(jié)構(gòu),提高閱讀效率。然而,有時候我們在生成目錄的過程中會遇到一些問題,比如目錄生成出錯,順序混亂等。那么,如果word目錄生成錯亂,我們應該如何解決呢?首

在Golang中實現(xiàn)精確除法運算是一個常見的需求,特別是在涉及金融計算或其它需要高精度計算的場景中。Golang的內(nèi)置的除法運算符“/”是針對浮點數(shù)計算的,并且有時會出現(xiàn)精度丟失的問題。為了解決這個問題,我們可以借助第三方庫或自定義函數(shù)來實現(xiàn)精確除法運算。一種常見的方法是使用math/big包中的Rat類型,它提供了分數(shù)的表示形式,可以用來實現(xiàn)精確的除法運算

MDF文件是一種常見的數(shù)據(jù)庫文件格式,它是MicrosoftSQLServer數(shù)據(jù)庫的主要文件之一。在數(shù)據(jù)庫管理系統(tǒng)中,MDF文件用于保存數(shù)據(jù)庫的主要數(shù)據(jù),包括表、索引、存儲過程等。建立MDF文件是創(chuàng)建數(shù)據(jù)庫的關鍵步驟之一,下面將介紹一些常見的方法。使用SQLServerManagementStudio(SSMS)SQLServerManag
