ValidateImg.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using System.Drawing;
  3. namespace Ant.Service.Utilities
  4. {
  5. /// <summary>
  6. /// 验证码 继承 System.Web.UI.Page ,Session["xk_validate_code"]
  7. /// </summary>
  8. public class ValidateImg : System.Web.UI.Page
  9. {
  10. private void Page_Load(object sender, EventArgs e)
  11. {
  12. char[] chars = "023456789".ToCharArray();
  13. System.Random random = new Random();
  14. string validateCode = string.Empty;
  15. for (int i = 0; i < 4; i++)
  16. {
  17. char rc = chars[random.Next(0, chars.Length)];
  18. if (validateCode.IndexOf(rc) > -1)
  19. {
  20. i--;
  21. continue;
  22. }
  23. validateCode += rc;
  24. }
  25. Session["xk_validate_code"] = validateCode;
  26. CreateImage(validateCode);
  27. }
  28. /// <summary>
  29. /// 创建图片
  30. /// </summary>
  31. /// <param name="checkCode"></param>
  32. private void CreateImage(string checkCode)
  33. {
  34. int iwidth = (int)(checkCode.Length * 11);
  35. System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 19);
  36. Graphics g = Graphics.FromImage(image);
  37. g.Clear(Color.White);
  38. //定义颜色
  39. Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Chocolate, Color.Brown, Color.DarkCyan, Color.Purple };
  40. Random rand = new Random();
  41. //输出不同字体和颜色的验证码字符
  42. for (int i = 0; i < checkCode.Length; i++)
  43. {
  44. int cindex = rand.Next(7);
  45. Font f = new System.Drawing.Font("Microsoft Sans Serif", 11);
  46. Brush b = new System.Drawing.SolidBrush(c[cindex]);
  47. g.DrawString(checkCode.Substring(i, 1), f, b, (i * 10) + 1, 0, StringFormat.GenericDefault);
  48. }
  49. //画一个边框
  50. g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
  51. //输出到浏览器
  52. System.IO.MemoryStream ms = new System.IO.MemoryStream();
  53. image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
  54. Response.ClearContent();
  55. Response.ContentType = "image/Jpeg";
  56. Response.BinaryWrite(ms.ToArray());
  57. g.Dispose();
  58. image.Dispose();
  59. }
  60. }
  61. }