靜態只讀字符串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;
在您的註冊按鈕中,您可以使用會話【“檢查”】來判斷驗證碼是否正確。