用戶在注冊或登錄時,為了進一步保證安全性,越來越多的網站開始采用動態生成的圖形碼或附加碼進行驗證。驗證碼技術就是在服務器端生成一個隨機數,并將其保存在內存中,然后將隨機數寫入設計好的圖片中,發送給瀏覽器,并以圖片形式顯示給最終用戶。前幾天,在完成一個利用Script進行用戶注冊及登錄的驗證時,在加入驗證碼這一塊的時候,發現了各種生成驗證碼的方式,就利用空余時間做了一個整理及重寫。那么我的博客之旅就從這篇驗證碼的生成開始了。
下面主要是幾種不同的生成驗證碼的方式:
1、繪制純數字的網站驗證碼
本實例實現的是數字驗證碼技術,即隨機生成4位數字作為驗證碼。在開發繪制會員登錄驗證模塊時可以使用數字驗證碼技術。
■設計過程
在一個新建的窗體CheckCode.aspx中編寫生成數字驗證碼的方法:
{ Response.Write("<script>alert('驗證碼錯誤!')</script>"); } else Response.Write("<script>alert('驗證碼正確!')</script>"); } 2、繪制數字與字母組合的網站驗證碼 和純數字的很相似,具體區別在隨機生成字符串的方法中 privatestringGenerateCheckCode(){intnumber;charcode;stringcheckCode=String.Empty;Randomrandom=newRandom();for(inti=0;i<4;i++){number=random.Next();if(number%2==0)code=(char)('0'+(char)(number%10));elsecode=(char)('A'+(char)(number%26));checkCode+=code.ToString();}Response.Cookies.Add(newHttpCookie("CheckCode",checkCode));returncheckCode;} 字符串生成后,接下來就是將該字符串繪制成圖片顯示出來。代碼如下: privatevoidCreateCheckCodeImage(stringcheckCode){if(checkCode==null||checkCode.Trim()==String.Empty)return;System.Drawing.Bitmapimage=newSystem.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length*12.5)),22);Graphicsg=Graphics.FromImage(image);try{//生成隨機生成器Randomrandom=newRandom();//清空圖片背景色g.Clear(Color.White);//畫圖片的背景噪音線for(inti=0;i<2;i++){intx1=random.Next(image.Width);intx2=random.Next(image.Width);inty1=random.Next(image.Height);inty2=random.Next(image.Height);g.DrawLine(newPen(Color.Black),x1,y1,x2,y2);}Fontfont=newSystem.Drawing.Font("Arial",12,(System.Drawing.FontStyle.Bold));System.Drawing.Drawing2D.LinearGradientBrushbrush=new System.Drawing.Drawing2D.LinearGradientBrush( newRectangle(0,0,image.Width,image.Height), Color.Blue,Color.DarkRed,1.2f,true); g.DrawString(checkCode,font,brush,2,2);//畫圖片的前景噪音點for(inti=0;i<100;i++){intx=random.Next(image.Width);inty=random.Next(image.Height);image.SetPixel(x,y,Color.FromArgb(random.Next()));}//畫圖片的邊框線g.DrawRectangle(newPen(Color.Silver),0,0,image.Width-1,image.Height-1);System.IO.MemoryStreamms=newSystem.IO.MemoryStream();image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);Response.ClearContent();Response.ContentType="image/Gif";Response.BinaryWrite(ms.ToArray());}finally{g.Dispose();image.Dispose();}} 在登錄的窗口進行驗證碼輸入是否正確的判斷: protectedvoidButton1_Click(objectsender,EventArgse) { HttpCookiecookie=Request.Cookies["CheckCode"]; if(cookie.Value==this.TextBox1.Text.Trim()) { Response.Write("<script>alert('驗證碼正確!')</script>"); } else { Response.Write("<script>alert('驗證碼錯誤!')</script>"); } } 那么有關于數字與字母組合的網站驗證碼就生成了。 3、四則運算式的驗證碼 其他的和數字和字母混合生成的驗證碼相似,我就不寫了,具體區別在隨機生成四則運算式的方法中,如下: privatestringGenerateCheckCode() { Randomrd=newRandom(); intResults=0; intNum1=rd.Next(10); intNum2=rd.Next(10); stringExpressions=""; intF=(rd.Next(4)+1); switch(F) { case1: Results=Num1+Num2; Expressions=Num1+"+"+Num2; break; case2: Results=Num1-Num2; Expressions=Num1+"-"+Num2; break; case3: Results=Num1*Num2; Expressions=Num1+"*"+Num2; break; case4: if(Num2>0) { Results=Convert.ToInt16(Num1/Num2); Expressions=Num1+"/"+Num2; } else { Results=Num1; Expressions=Num1+"/1"; } break; } session["Code"]=Results.ToString(); returnExpressions; } 這篇主要講了三種方法,在下一篇中會介紹另一種方法——中文彩色驗證碼,因代碼篇幅較長就放在下一篇中介紹了。
新聞熱點
疑難解答