當前位置:名人名言大全網 - 端午節短信 - ASP.NET如何設計壹個簡單的驗證碼?

ASP.NET如何設計壹個簡單的驗證碼?

創建壹個新的Image.aspx頁面,不在前景中添加任何元素。背景代碼是

靜態只讀字符串STR =“0123456789 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz“;

受保護的void Page_Load(對象發送方,EventArgs e)

{

Random rd =新隨機();

int a = rd。下壹個(100);

int b = rd。下壹個(1000);

int m = rd。下壹個(10000);

int n = rd。下壹個(100000);

字符串結果= STR。substring(a % 62,1);

結果+=字符串。substring(b % 62,1);

結果+=字符串。substring(m % 62,1);

結果+=字符串。substring(n % 62,1);

session【“check“】= result;

CreateImage(結果);

}

///& lt;總結& gt

///創建指定內容的驗證圖片並輸出。

///& lt;/summary & gt;

///& lt;param name =“content“& gt;& lt/param & gt;

私有void CreateImage(字符串內容)

{

//判斷字符串不等於null和null。

if(content = = null | | content。trim()= = String。空的)

返回;

//創建位圖對象

位圖圖像=新位圖((int)數學。天花板((內容。長度* 12.5)),22);

//創建圖形

圖形g =圖形。FromImage(圖像);

嘗試

{

//生成隨機生成器

Random Random = new Random();

//清除圖片的背景顏色

g.透明(彩色。白色);

//畫出圖片的背景幹擾線。

for(int I = 0;我& lt2;i++)

{

int x1 = random。下壹張(圖片。寬度);

int x2 =隨機。下壹張(圖片。寬度);

int y1 = random。下壹張(圖片。身高);

int y2 =隨機。下壹張(圖片。身高);

g.新鋼筆(彩色。黑色)、x1、y1、x2、y2);

}

Font font =新字體(“Arial“,12,(FontStyle。粗體);

系統。drawing . drawing 2d . lineargradientbrush畫筆=新系統。drawing . drawing 2d . lineargradientbrush(新矩形(0,0,image。寬度、圖像。身高)、顏色。黑色,彩色。DarkRed,1.2f,true);

g.抽繩(內容、字體、畫筆、2、2);

//繪制圖片的前景幹擾點

for(int I = 0;我& lt100;i++)

{

int x = random。下壹張(圖片。寬度);

int y = random。下壹張(圖片。身高);

形象。set pixel(x,y,Color。from argb(random。next()));

}

image = twist image(image,true,4,4);

//繪制圖片的邊框線

g.DrawRectangle(新鋼筆(顏色。銀色),0,0,圖像。寬度- 1,圖像。高度-1);

//將圖片輸出到頁面

系統。IO .內存流ms =新系統。IO . memory stream();

形象。保存(毫秒,系統。drawing . imaging . imageformat . gif);

回應。clear content();

回應。content type =“image/Gif“;

回應。binary write(ms . ToArray());

}

最後

{

g.dispose();

形象。dispose();

}

}

#區域產生濾波器效果

private const double PI = 3.141592653589793238462643832795;

private const double PI2 = 6.28318530717958647692528676559;

///& lt;總結& gt

///正弦波失真圖片

///& lt;/summary & gt;

///& lt;param name =“srcBmp“& gt;圖像路徑

///& lt;param name =“bXDir“& gt;如果失真,請選擇“真”

///& lt;param name =“nMultValue“& gt;波形的振幅倍數越大,失真度越高,通常為3

///& lt;param name =“d phase“& gt;波形的初始相位,取值區間【0-2 * pi】

///& lt;退貨& gt& lt/returns & gt;

公共位圖TwistImage(位圖srcBmp,bool bXDir,double dMultValue,double dPhase)

{

Bitmap destBmp =新位圖(srcBmp。寬度,srcBmp。身高);

//用白色填充位圖背景。

系統。繪圖。圖形圖形=圖形。from image(dest BMP);

圖表。FillRectangle(新的SolidBrush(顏色。白色),0,0,destBmp。寬度,destBmp。身高);

圖表。dispose();

double dBaseAxisLen = bXDir?(雙)destBmp。高度:(雙)destBmp。寬度;

for(int I = 0;我& ltdestBmp。寬度;i++)

{

for(int j = 0;j & ltdestBmp。身高;j++)

{

double dx = 0;

dx = bXDir?(PI2 *(double)j)/dBaseAxisLen:(PI2 *(double)I)/dBaseAxisLen;

dx+= d phase;

double dy =數學。sin(dx);

//獲取當前點的顏色。

int nOldX = 0,nOldY = 0;

nOldX = bXDir?I+(int)(dy * dMultValue):I;

nOldY = bXDir?j:j+(int)(dy * dMultValue);

系統。繪圖。Color color = srcBmp。get pixel(I,j);

if(nOldX & gt;= 0 & amp& ampnOldX & ltdestBmp。寬度

& amp& ampnOldY & gt= 0 & amp& ampnOldY & ltdestBmp。高度)

{

destBmp。set pixel(nOldX,nOldY,color);

}

}

}

return destBmp

}

#結束區域

當在另壹個頁面上引用時,

& ltimg id =“img“alt =“驗證碼“src =“image . aspx“/& gt。

& ltinput type =“button“onclick =“JavaScript:var img = document . getelementbyid(‘img‘);img . src = img . src+‘?‘。;“value=“我看不清楚,換壹個“/& gt;

在您的註冊按鈕中,您可以使用會話【“檢查”】來判斷驗證碼是否正確。