C#使用GDI+實現(xiàn)生成驗證碼
一、概述
一般處理程序 ashx :它沒有服務(wù)器控件,用response輸出什么就是什么。
生成驗證碼原理:產(chǎn)生隨機字符,并將字符生成為圖片,同時儲存到Session里去,然后驗證用戶輸入的內(nèi)容是否與Session中的驗證碼相符即可。
效果圖:用戶可以點擊切換驗證碼信息。

二、一般處理程序
public class CheckCodeHandler : IHttpHandler, IRequiresSessionState//使用到Session,需要實現(xiàn)此接口IRequiresSessionState
{
private int intLength = 5; //長度
private string strIdentify = "Identify"; //隨機字串存儲鍵值,以便存儲到Session中
/// <summary>
/// 生成驗證圖片核心代碼
/// </summary>
/// <param name="context"></param>
public void ProcessRequest(HttpContext context)
{
//背景用白色填充
Bitmap map = new Bitmap(200, 60);
Graphics g = Graphics.FromImage(map);
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);
//將隨機生成的字符串繪制到圖片上
string letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
Random r = new Random();
StringBuilder s = new StringBuilder();
Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
for (int i = 0; i < intLength; i++)
{
s.Append(letters.Substring(r.Next(0, letters.Length - 1), 1));
g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15));
}
font.Dispose();
context.Session[strIdentify] = s.ToString(); //先保存在Session中,驗證與用戶輸入是否一致
//生成干擾線條,混淆背景
Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
for (int i = 0; i < 10; i++)
{
g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
}
pen.Dispose();
//設(shè)置輸出流圖片格式
context.Response.ContentType = "image/gif";
map.Save(context.Response.OutputStream, ImageFormat.Gif);
map.Dispose();
context.Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}三、在頁面調(diào)用
<img src="CheckCodeHandler.ashx" alt="驗證碼" style="width: 60px; height: 24px" />
if (this.TextBox1.Text.ToUpper().Trim() != Session["strIdentify"].ToString().ToUpper().Trim())
{
Response.Write("<script>alert('驗證碼不正確')</script>");
}
else
{
Response.Write("<script>alert('登錄成功')</script>");
}到此這篇關(guān)于C#使用GDI+實現(xiàn)生成驗證碼的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#中Abstract方法和Virtual方法的區(qū)別
這篇文章介紹了C#中Abstract方法和Virtual方法的區(qū)別,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04
C#利用Spire.Pdf包實現(xiàn)為PDF添加數(shù)字簽名
Spire.PDF for .NET 是一款專業(yè)的基于.NET平臺的PDF文檔控制組件。它能夠讓開發(fā)人員在不使用Adobe Acrobat和其他外部控件的情況下,運用.NET 應(yīng)用程序創(chuàng)建,閱讀,編寫和操縱PDF 文檔。本文將利用其實現(xiàn)添加數(shù)字簽名,需要的可以參考一下2022-08-08
C# 中屬性PropertyInfo的setvalue用法說明
這篇文章主要介紹了C# 中屬性PropertyInfo的setvalue用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
C#中GridView動態(tài)添加列的實現(xiàn)方法
這篇文章主要介紹了C#中GridView動態(tài)添加列的實現(xiàn)方法,涉及C#中GridView的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07
在C#項目中調(diào)用C++編寫的動態(tài)庫的三種方式
這篇文章給大家介紹了三種方式詳解如何在C#項目中調(diào)用C++編寫的動態(tài)庫,文中通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-01-01

