zoukankan      html  css  js  c++  java
  • 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: 该调用是 ASP.NET Web 窗体设计器所必需的。   
    117. //   
    118. InitializeComponent();   
    119. base.OnInit(e);   
    120. }   
    121. /// <summary>   
    122. /// 设计器支持所需的方法 - 不要使用代码编辑器修改   
    123. /// 此方法的内容。   
    124. /// </summary>   
    125. private void InitializeComponent()   
    126. {   
    127. this.Load += new System.EventHandler(this.Page_Load);   
    128. }  
    129. #endregion   
    130. }   
    131. }   
  • 相关阅读:
    jquery总结
    Reporting Services子报表
    Reporting Services分组及Toggle
    Reporting Services报表钻取
    Reporting Services环境
    两种很有用的组件
    Reporting Services正确显示页码
    Reporting Services发布
    Java面试题
    BigInteger引申的一个访问权限控制解决方案
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3572101.html
Copyright © 2011-2022 走看看