转载出处:http://blog.csdn.net/loverszhaokai/archive/2010/10/04/5921139.aspx
/////////////////////////////////////////////////////////////////////////////////////////
//如果想进行登陆的时候验证。只要判断用户输入的数据是否和Session[“Validate”]相等就行了//
////////////////////////////////////////////////////////////////////////////////////////
01.using System;
02.using System.Drawing;
03.public partial class 生成随机图片 : System.Web.UI.Page
04.{
05. //生成随机图片背景
06. protected void CreateImageM(string validateCode)
07. {
08. //图像的宽度,与验证码的长度成一定比例
09. int iwidth = (int)(validateCode.Length * 11.5);
10. //创建一个长20,宽iwidth的图像对象
11. System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth,20);
12. //创建一个新绘图对象
13. Graphics g = Graphics.FromImage(image);
14. //绘图用的字体和字号
15. Font f = new System.Drawing.Font("Arial",10,System.Drawing.FontStyle.Bold);
16. //绘图用的刷子的大小
17. Brush b = new System.Drawing.SolidBrush(Color.White);
18. //清除背景色,并且以深橄榄色填充
19. g.Clear(Color.DarkOliveGreen);
20. //格式化刷子的属性,用指定的刷子、颜色等在指定的范围内画图
21. g.DrawString(validateCode,f,b,3,3);
22. //创建铅笔对象
23. Pen blackPen = new Pen(Color.Black,0);
24. //创建随机对象
25. Random rand = new Random();
26. //随机画线
27. for (int i = 0; i < 5; i++)
28. {
29. int y = rand.Next(image.Height);
30. //用指定的铅笔画线,粗细由参数决定
31. g.DrawLine(blackPen,0,y,image.Width,y);
32. }
33. //输出绘图
34. System.IO.MemoryStream ms = new System.IO.MemoryStream();
35. //将图像保存到指定的流
36. image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
37. Response.ClearContent();
38. //配置输出类型
39. Response.ContentType = "Image/Jpeg";
40. //输入内容
41. Response.BinaryWrite(ms.ToArray());
42. //清空不需要的资源
43. g.Dispose();
44. image.Dispose();
45. }
46. //生成随机字符的方法
47. protected string CreateValidate(int count)
48. {
49. string allchar = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
50. //将验证码中所有的字符保存在一个字符串数组中
51. string[] allchararray = allchar.Split(',');
52. //初始化一个随机数
53. string randomcode = "";
54. int temp = -1;
55. //生成一个随机对象
56. Random rand = new Random();
57. //根据验证码的位数循环
58. for (int i = 0; i < count; i++)
59. {
60. //主要是防止生成相同的验证码
61. if (temp != -1)
62. {
63. //加入时间的刻度
64. rand = new Random(i*temp*((int)DateTime.Now.Ticks));
65. }
66. int t = rand.Next(35);
67. if (temp == t)
68. {
69. //相等的话重新生成
70. return CreateValidate(count);
71. }
72. temp = t;
73. randomcode += allchararray[t];
74. }
75. //在session中保存随机验证码
76. Session["Valid"] = randomcode;
77. //返回生成的随机字符
78. return randomcode;
79. }
80. protected void Page_Load(object sender, EventArgs e)
81. {
82. CreateImageM(CreateValidate(8));
83. }
84.}