(ASP.NET 2.0)ログインインタフェースの認証コードについて(後のスペアを残しておく)

11212 ワード

いくつかのサイトのログインまたは登録ページに入ると、ログインまたは登録を完了するには、画像の数字またはアルファベットを対応するテキストボックスに入力し、正しい場合は関連操作を完了することができます.そうしないと、検証コードエラーを提示します.検証コードの役割は主に:暴力的な暗号解読を防止する(すなわち、試行法で登録する);サーバへのアクセスの負担を軽減します.
基本的な作り方は,まずnビット(本例では5ビット)の文字列を生成し,ピクチャコントロールに書き込み,次にx本(本例では10本)程度の直線(位置ランダム)を描き,y個(本例では100個)程度の点(位置ランダム)を描くことででき,一部のフォーラム検証コードに色が付く.
まずusing Systemを導入する.Drawing;の名前空間;
ランダム文字列生成メソッドGenerateCheckCode()をもう1つ書きます.関数体は次のようになります.
 1         int number;

 2         char code;

 3         string checkCode = String.Empty;

 4 

 5         System.Random random = new Random();

 6 

 7         for (int i = 0; i < 6; i++)

 8         {

 9             number = random.Next();

10 

11             if (number % 2 == 0)

12                 code = (char)('0' + (char)(number % 10));

13             else

14                 code = (char)('A' + (char)(number % 26));

15 

16             checkCode += code.ToString();

17         }

18         Session["CheckCode"] = checkCode;

19 

20         //Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));

21 

22         return checkCode;

ここでは、生成された文字列を格納するためにSessionオブジェクトが使用されます.
そしてこの検証画像の作成を開始し、画像生成方法CreateCheckCodeImage(string checkCode)を書きます.その方法体は以下の通りです.
 1         if (checkCode == null || checkCode.Trim() == String.Empty)

 2             return;

 3 

 4         System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);

 5         Graphics g = Graphics.FromImage(image);

 6 

 7         try

 8         {

 9             //       

10             Random random = new Random();

11 

12             //       

13             g.Clear(Color.White);

14 

15             //         

16             for (int i = 0; i < 25; i++)

17             {

18                 int x1 = random.Next(image.Width);

19                 int x2 = random.Next(image.Width);

20                 int y1 = random.Next(image.Height);

21                 int y2 = random.Next(image.Height);

22 

23                 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);

24             }

25 

26             Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));

27             System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);

28             g.DrawString(checkCode, font, brush, 2, 2);

29 

30             //         

31             for (int i = 0; i < 100; i++)

32             {

33                 int x = random.Next(image.Width);

34                 int y = random.Next(image.Height);

35 

36                 image.SetPixel(x, y, Color.FromArgb(random.Next()));

37             }

38 

39             //       

40             g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

41 

42             System.IO.MemoryStream ms = new System.IO.MemoryStream();

43             image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

44             Response.ClearContent();

45             Response.ContentType = "image/Gif";

46             Response.BinaryWrite(ms.ToArray());

47         }

48         finally

49         {

50             g.Dispose();

51             image.Dispose();

52         }

最後にPage_Loadイベントに一言追加:this.CreateCheckCodeImage(GenerateCheckCode());
OK、制作完了.