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相關內(nèi)容感興趣的讀者可查看本站專題:《asp.net操作json技巧總結(jié)》、《asp.net字符串操作技巧匯總》、《asp.net操作XML技巧總結(jié)》、《asp.net文件操作技巧匯總》、《asp.net ajax技巧總結(jié)專題》及《asp.net緩存操作技巧總結(jié)》。
希望本文所述對大家asp.net程序設計有所幫助。
- asp.net 驗證碼生成和刷新及驗證
- asp.net(C#) 生成隨機驗證碼的代碼
- asp.net 簡單驗證碼驗證實現(xiàn)代碼
- ASP.NET MVC驗證碼功能實現(xiàn)代碼
- ASP.NET中的無刷新驗證碼的開發(fā)(完整代碼)
- asp.net 圖片驗證碼的HtmlHelper
- asp.net生成驗證碼(純數(shù)字)
- asp.net中3種驗證碼示例(實現(xiàn)代碼)(數(shù)字,數(shù)字字母混和,漢字)
- asp.net 驗證碼的簡單制作(vb.net+C#)
- asp.net下生成英文字符數(shù)字驗證碼的代碼
- asp.net生成字母和數(shù)字混合圖形驗證碼
- Asp.net開發(fā)之webform圖片水印和圖片驗證碼的實現(xiàn)方法
相關文章
ASP.NET MVC5網(wǎng)站開發(fā)之實現(xiàn)數(shù)據(jù)存儲層功能(三)
這篇文章主要為大家詳細介紹了ASP.NET MVC5網(wǎng)站開發(fā)之實現(xiàn)數(shù)據(jù)存儲層功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08
.NET使用NPOI實現(xiàn)讀取帶有圖片的excel數(shù)據(jù)
這篇文章主要為大家詳細介紹了.NET如何使用NPOI實現(xiàn)讀取帶有圖片的excel數(shù)據(jù),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-03-03
asp.net中執(zhí)行存儲數(shù)據(jù)操作時數(shù)據(jù)被自動截取的一種情況
asp.net中執(zhí)行存儲數(shù)據(jù)操作時數(shù)據(jù)被自動截取的一種情況...2006-09-09
NetCore實現(xiàn)全局模型綁定異常信息統(tǒng)一處理(場景分析)
本文主要講解NetCore如何使用中間件捕獲模型綁定的異常信息,對NetCore實現(xiàn)全局模型綁定異常信息統(tǒng)一處理場景分析及實現(xiàn)代碼感興趣的朋友一起看看吧2021-12-12

