基于ASP.NET實現(xiàn)驗證碼生成詳解
作業(yè):驗證碼
要求:
(1)驗證碼應(yīng)該是圖片格式,不能是文字格式,即無法用鼠標(biāo)選中。
(2)驗證碼上應(yīng)該有噪點和干擾線條。
(3)驗證碼應(yīng)該回避相似字符,如“0”和“o”“I”和“1”等。
(4)驗證碼至少是數(shù)字和字母(含大小寫)的組合,不應(yīng)該是單純的數(shù)字或字母,可以出現(xiàn)漢字。應(yīng)該實現(xiàn)輸入驗證碼字母字母“不區(qū)分大小寫”。驗證碼中的內(nèi)容,應(yīng)該是隨機生成。
(5)驗證碼,可以通過點擊圖片或旁邊文字實現(xiàn)“看不清,換一張”的功能。
(6)應(yīng)當(dāng)有個用于核對驗證碼輸入是否正確的tbx和btn,當(dāng)點擊btn時,彈窗提示驗證碼輸入的是正確或錯誤
新建一個ashx文件


前端頁面
<asp:Label ID="Label1" runat="server" Text="請輸入驗證碼:" ></asp:Label> <asp:TextBox ID="tbx_check" runat="server"></asp:TextBox> <asp:ImageButton ID="ImageButton1" runat="server" src="checknumber.ashx" alt="驗證碼"/> <asp:Button ID="btn_check" runat="server" Text="驗證" OnClick="btn_check_Click" />
aspx代碼
protected void btn_check_Click(object sender, EventArgs e)
{
//不區(qū)分大小寫驗證
if (String.Compare(tbx_check.Text.Trim(), Session["check"].ToString(), true) == 0)
{
Response.Write("<script>alert('驗證碼正確') </script>");
}
else
{
Response.Write("<script>alert('驗證碼錯誤') </script>");
}
}
//點擊圖片更換驗證碼
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
ImageButton1.ImageUrl = "checknumber.ashx?id=" + new Random(100).ToString();
}ashx代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//畫板
using System.Drawing;
using System.Drawing.Imaging;
//Session傳值
using System.Web.SessionState;
namespace 驗證碼模塊
{
/// <summary>
/// Handler1 的摘要說明
/// </summary>
public class Handler1 : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
//定義位圖的寬度和高度
int iBmpW = 200;
int iBmpS = 50;
//創(chuàng)建位圖對象(并初始化寬度和高度)
Bitmap Bmp = new Bitmap(iBmpW, iBmpS);
//創(chuàng)建畫布
Graphics Grc = Graphics.FromImage(Bmp);//將位圖裝載到畫布里面
//將畫布的背景色改為白色
Grc.Clear(Color.White);
//定義畫筆對象
SolidBrush solidBrush = new SolidBrush(Color.Blue);
//定義存放的字符串,畫布上要顯示的驗證碼,回避相似字符所以去掉I、1、o、0
string sString = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghyzklmnopqrstuvwxtz23456789呆鍋工醬";
//定義隨機數(shù)
Random Rnd = new Random((int)DateTime.Now.Ticks);//強制轉(zhuǎn)換為整型
//for存放隨機數(shù)的字符變量
string scode = null;
for (int i = 0; i < 6; i++)
{
string temp = sString.Substring(Rnd.Next(0, sString.Length), 1);//將隨即得到的每個字符進行字符串構(gòu)造
scode += temp;
}
//隨機輸出噪點
Random rand = new Random();
for (int i = 0; i < 10; i++)
{
int x = rand.Next(Bmp.Width);
int y = rand.Next(Bmp.Height);
Grc.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
}
int z = 6;//干擾線條數(shù)
for (int i = 0; i < z; i++)
{
int x1 = rand.Next(Bmp.Width);
int x2 = rand.Next(Bmp.Width);
int y1 = rand.Next(Bmp.Height);
int y2 = rand.Next(Bmp.Height);
Grc.DrawLine(new Pen(Color.LightGray, 1), x1, y1, x2, y2);//根據(jù)坐標(biāo)畫線
}
Font ft = new Font("Arial", 25);
Grc.DrawString(scode, ft, solidBrush, 0, 0);
context.Response.ContentType = "image/jpg";
Bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);
//向外傳scode的值以驗證
context.Session["check"] = scode;
}
public bool IsReusable
{
get
{
return false;
}
}
}
}到此這篇關(guān)于基于ASP.NET實現(xiàn)驗證碼生成詳解的文章就介紹到這了,更多相關(guān)ASP.NET驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
透過ashx看瀏覽器服務(wù)器運行本質(zhì)(圖解)
一般處理程序(HttpHandler):是一個實現(xiàn)System.Web.IHttpHandler接口的特殊類。任何一個實現(xiàn)了IHttpHandler接口的類是作為一個外部請求的目標(biāo)程序的前提,感興趣的朋友可以了解下或許有所幫助2013-01-01
asp.net源程序編譯為dll文件并調(diào)用的實現(xiàn)過程
這篇文章主要介紹了asp.net源程序編譯為dll文件并調(diào)用的實現(xiàn)過程,非常有實用價值,需要的朋友可以參考下2014-07-07
asp.net提取多層嵌套json數(shù)據(jù)的方法
這篇文章主要介紹了asp.net提取多層嵌套json數(shù)據(jù)的方法,結(jié)合實例形式較為詳細(xì)的分析了asp.net解析json格式數(shù)據(jù)的步驟與相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-06-06
ASP.NET中Response.BufferOutput屬性的使用技巧
這篇文章介紹了ASP.NET中Response.BufferOutput屬性的使用技巧,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
在Global.asax文件里實現(xiàn)通用防SQL注入漏洞程序(適應(yīng)于post/get請求)
可使用Global.asax中的Application_BeginRequest(object sender, EventArgs e)事件來實現(xiàn)表單或者URL提交數(shù)據(jù)的獲取,獲取后傳給SQLInjectionHelper類ValidUrlData方法來完成檢查2013-01-01
.net?core利用PdfSharpCore操作PDF實例教程
操作pdf是我們?nèi)粘i_發(fā)中經(jīng)常遇到的功能,下面這篇文章主要給大家介紹了關(guān)于.net?core利用PdfSharpCore操作PDF實例的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12

