程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#寫的較完美驗證碼通用類

C#寫的較完美驗證碼通用類

編輯:C#入門知識

  1. using System;
  2. using System.Collections;   
  3. using System.ComponentModel;   
  4. using System.Data;   
  5. using System.Drawing;   
  6. using System.Web;   
  7. using System.Web.SessionState;   
  8. using System.Web.UI;   
  9. using System.Web.UI.WebControls;   
  10. using System.Web.UI.HtmlControls;   
  11. namespace WebApplication1.驗證碼   
  12. {   
  13. ///  <summary>   
  14. ///  完美隨機驗證碼  0.10   
  15. ///  Verion:0.10   
  16. ///  Description:隨機生成設定驗證碼,並隨機旋轉一定角度,字體顏色不同   
  17. ///  </summary>   
  18. public class ValidateCode : System.Web.UI.Page   
  19. {   
  20. private void Page_Load(object sender, System.EventArgs e)   
  21. {   
  22. string  randomcode  =  this.CreateRandomCode(4);   
  23. Session["ValidateCode"]  =  randomcode;   
  24. //ViewState["ValidateCode"]  =  randomcode;   
  25. this.CreateImage(randomcode);   
  26. }   
  27. ///  <summary>   
  28. ///  生成隨機碼   
  29. ///  </summary>   
  30. ///  <param  name="length">隨機碼個數</param>   
  31. ///  <returns></returns>   
  32. private  string  CreateRandomCode(int length)   
  33. {   
  34. int rand;   
  35. char code;   
  36. string randomcode = String.Empty;   
  37. //生成一定長度的驗證碼   
  38. System.Random random = new Random();   
  39. for(int i=0;i<length;i++)   
  40. {   
  41. rand = random.Next();   
  42. if(rand%3 == 0)   
  43. {   
  44. code = (char)(A + (char)(rand%26));   
  45. }   
  46. else  
  47. {   
  48. code = (char)(0 + (char)(rand%10));   
  49. }   
  50. randomcode += code.ToString();   
  51. }   
  52. return  randomcode;   
  53. }   
  54. ///  <summary>   
  55. ///  創建隨機碼圖片   
  56. ///  </summary>   
  57. ///  <param  name="randomcode">隨機碼</param>   
  58. private  void  CreateImage(string randomcode)   
  59. {   
  60. int randAngle = 45; //隨機轉動角度   
  61. int mapwidth = (int)(randomcode.Length * 23);   
  62. Bitmap map = new Bitmap(mapwidth,28);//創建圖片背景   
  63. Graphics graph = Graphics.FromImage(map);   
  64. graph.Clear(Color.AliceBlue);//清除畫面,填充背景   
  65. graph.DrawRectangle(new Pen(Color.Black,0),0,0,map.Width-1,map.Height-1);//畫一個邊框   
  66. //graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式   
  67. Random rand = new Random();   
  68. //背景噪點生成   
  69. Pen blackPen = new Pen(Color.LightGray,0);   
  70. for (int i=0;i<50;i++)   
  71. {   
  72. int x = rand.Next(0,map.Width);   
  73. int y = rand.Next(0,map.Height);   
  74. graph.DrawRectangle(blackPen,x,y,1,1);   
  75. }   
  76. //驗證碼旋轉,防止機器識別   
  77. char[] chars = randomcode.ToCharArray();//拆散字符串成單字符數組   
  78. //文字距中   
  79. StringFormat format = new StringFormat(StringFormatFlags.NoClip);   
  80. format.Alignment = StringAlignment.Center;   
  81. format.LineAlignment = StringAlignment.Center;   
  82. //定義顏色   
  83. Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };   
  84. //定義字體   
  85. string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋體" };   
  86. for(int i=0;i<chars.Length;i++)   
  87. {   
  88. int cindex = rand.Next(7);   
  89. int findex = rand.Next(5);   
  90. Font f = new System.Drawing.Font(font[findex],13,System.Drawing.FontStyle.Bold);//字體樣式(參數2為字體大小)   
  91. Brush b = new System.Drawing.SolidBrush(c[cindex]);   
  92. Point dot = new Point(16,16);   
  93. //graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//測試X坐標顯示間距的   
  94. float angle = rand.Next(-randAngle,randAngle);//轉動的度數   
  95. graph.TranslateTransform(dot.X,dot.Y);//移動光標到指定位置   
  96. graph.RotateTransform(angle);   
  97. graph.DrawString(chars[i].ToString(),f,b,1,1,format);   
  98. //graph.DrawString(chars[i].ToString(),fontstyle,new SolidBrush(Color.Blue),1,1,format);   
  99. graph.RotateTransform(-angle);//轉回去   
  100. graph.TranslateTransform(2,-dot.Y);//移動光標到指定位置   
  101. }   
  102. //graph.DrawString(randomcode,fontstyle,new SolidBrush(Color.Blue),2,2); //標准隨機碼   
  103. //生成圖片   
  104. System.IO.MemoryStream ms = new System.IO.MemoryStream();   
  105. map.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);   
  106. Response.ClearContent();   
  107. Response.ContentType = "image/gif";   
  108. Response.BinaryWrite(ms.ToArray());   
  109. graph.Dispose();   
  110. map.Dispose();   
  111. }  
  112. #region Web 窗體設計器生成的代碼   
  113. override protected void OnInit(EventArgs e)   
  114. {   
  115. //   
  116. // CODEGEN:&n

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved