ASP.NET with C#生成验证码的过程
生成验证码的大概过程就是在后台取得一个随机的字符串,然后该随机字符串绘制成一幅图片,当然,图片可以加上噪声,防止基本上不会出现的N人分析图形数据获取和还原字符串。
具体生成验证码的代码如下,在生成随机字符串的同时会将字符串设置到一个Session["ValidateCode"] 中,实用的时候只要得到用户返回值和Session值比较就可以得出填入的验证码是否一致了。
1
using System;
2
using System.IO;
3
using System.Web.UI;
4
using System.Drawing;
5
using System.Drawing.Imaging;
6
using System.Drawing.Drawing2D;
7
8
namespace Web.Common
9
{
10
/// <summary>
11
/// validate 的摘要说明。
12
/// </summary>
13
public class Validate: System.Web.UI.Page
14
{
15
private void Page_Load(object sender, EventArgs e)
16
{
17
string strValidateCode = ValidateCode(6);//取得随机字符串,并设置Session值
18
DrawValidateCode(strValidateCode,50,100);//绘图
19
}
20
21
//绘图
22
private void DrawValidateCode(string strValidateCode,int intFgNoise,int intBgNoise)
23
{
24
if(strValidateCode == null || strValidateCode.Trim() == String.Empty)
25
{
26
return;
27
}
28
else
29
{
30
//建立一个位图文件 确立长宽
31
Bitmap bmpImage = new Bitmap((int)Math.Ceiling((strValidateCode.Length * 12.5)), 22);
32
Graphics grpGraphics = Graphics.FromImage(bmpImage);
33
34
try
35
{
36
//生成随机生成器
37
Random rndRandom = new Random();
38
39
//清空图片背景色
40
grpGraphics.Clear(Color.White);
41
42
//画图片的背景噪音线
43
for(int i=0; i<intBgNoise; i++)
44
{
45
int int_x1 = rndRandom.Next(bmpImage.Width);
46
int int_x2 = rndRandom.Next(bmpImage.Width);
47
int int_y1 = rndRandom.Next(bmpImage.Height);
48
int int_y2 = rndRandom.Next(bmpImage.Height);
49
50
grpGraphics.DrawLine(new Pen(Color.Silver), int_x1, int_y1, int_x2, int_y2);
51
}
52
//把产生的随机数以字体的形式写入画面
53
Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
54
LinearGradientBrush brhBrush = new LinearGradientBrush(new Rectangle(0, 0, bmpImage.Width, bmpImage.Height), Color.Blue, Color.DarkRed, 1.2f, true);
55
grpGraphics.DrawString(strValidateCode, font, brhBrush, 2, 2);
56
57
//画图片的前景噪音点
58
for(int i=0; i<intFgNoise; i++)
59
{
60
int int_x = rndRandom.Next(bmpImage.Width);
61
int int_y = rndRandom.Next(bmpImage.Height);
62
63
bmpImage.SetPixel(int_x, int_y, Color.FromArgb(rndRandom.Next()));
64
}
65
66
//画图片的边框线
67
grpGraphics.DrawRectangle(new Pen(Color.Silver), 0, 0, bmpImage.Width - 1, bmpImage.Height - 1);
68
69
MemoryStream memsMemoryStream = new MemoryStream();
70
bmpImage.Save(memsMemoryStream, ImageFormat.Gif);
71
Response.ClearContent();
72
Response.ContentType = "image/Gif";
73
Response.BinaryWrite(memsMemoryStream.ToArray());
74
}
75
finally
76
{
77
grpGraphics.Dispose();
78
bmpImage.Dispose();
79
}
80
}
81
}
82
83
//取得随机字符串,并设置Session值
84
private string ValidateCode(int intLength)
85
{
86
int intNumber;
87
char chrCode;
88
string strValidateCode = String.Empty;
89
90
Random rndRandom = new Random();
91
92
for(int i=0;i<intLength;i++)
93
{
94
intNumber = rndRandom.Next();
95
if(intNumber % 2 == 0)
96
{
97
chrCode = (char)('0' + (char)(intNumber % 10));//如果随机数是偶数 取余
98
}
99
else
100
{
101
chrCode = (char)('A' + (char)(intNumber % 26));//如果随机数是奇数 选择从[A-Z]
102
}
103
strValidateCode += chrCode.ToString();
104
}
105
106
Session["ValidateCode"] = strValidateCode;//设置Session["ValidateCode"]
107
//Response.Cookies.Add(new HttpCookie("strValidateCode",strValidateCode));
108
109
return strValidateCode;
110
}
111
112
Web 窗体设计器生成的代码
132
}
133
134
}
135

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

132

133

134

135
