驗證碼類
1
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
namespace QJW.VerifyCode { //用法: //public FileContentResult CreateValidate() //{ // ValidateCode vCode = new ValidateCode(); // string code = vCode.CreateValidateCode(5); // Session["ValidateCode"] = code; // byte[] bytes = vCode.CreateValidateGraphic(code); // return File(bytes, "image/JPEG"); //} public class ValidateCode { public ValidateCode() { } /// <summary> /// 驗證碼的最大長度 /// </summary> public int MaxLength { get { return 10; } } /// <summary> /// 驗證碼的最小長度 /// </summary> public int MinLength { get { return 1; } } /// <summary> /// 生成驗證碼 /// </summary> /// <param name="length">指定驗證碼的長度</param> /// <returns></returns> public string CreateValidateCode( int length) { int [] randMembers = new int [length]; int [] validateNums = new int [length]; string validateNumberStr = "" ; //生成起始序列值 int seekSeek = unchecked (( int )DateTime.Now.Ticks); Random seekRand = new Random(seekSeek); int beginSeek = ( int )seekRand.Next(0, Int32.MaxValue - length * 10000); int [] seeks = new int [length]; for ( int i = 0; i < length; i++) { beginSeek += 10000; seeks[i] = beginSeek; } //生成隨機數字 for ( int i = 0; i < length; i++) { Random rand = new Random(seeks[i]); int pownum = 1 * ( int )Math.Pow(10, length); randMembers[i] = rand.Next(pownum, Int32.MaxValue); } //抽取隨機數字 for ( int i = 0; i < length; i++) { string numStr = randMembers[i].ToString(); int numLength = numStr.Length; Random rand = new Random(); int numPosition = rand.Next(0, numLength - 1); validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1)); } //生成驗證碼 for ( int i = 0; i < length; i++) { validateNumberStr += validateNums[i].ToString(); } return validateNumberStr; } /// <summary> /// 創建驗證碼的圖片 /// </summary> /// <param name="containsPage">要輸出到的page對象</param> /// <param name="validateNum">驗證碼</param> public byte [] CreateValidateGraphic( string validateCode) { Bitmap image = new Bitmap(( int )Math.Ceiling(validateCode.Length * 12.0), 22); Graphics g = Graphics.FromImage(image); try { //生成隨機生成器 Random random = new Random(); //清空圖片背景色 g.Clear(Color.White); //畫圖片的干擾線 for ( int i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine( new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new Font( "Arial" , 12, (FontStyle.Bold | FontStyle.Italic)); LinearGradientBrush brush = new LinearGradientBrush( new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true ); g.DrawString(validateCode, font, brush, 3, 2); //畫圖片的前景干擾點 for ( int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //畫圖片的邊框線 g.DrawRectangle( new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); //保存圖片數據 MemoryStream stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); //輸出圖片流 return stream.ToArray(); } finally { g.Dispose(); image.Dispose(); } } /// <summary> /// 得到驗證碼圖片的長度 /// </summary> /// <param name="validateNumLength">驗證碼的長度</param> /// <returns></returns> public static int GetImageWidth( int validateNumLength) { return ( int )(validateNumLength * 12.0); } /// <summary> /// 得到驗證碼的高度 /// </summary> /// <returns></returns> public static double GetImageHeight() { return 22.5; } } } |
使用方法
1
2
3
4
5
6
7
8
9
|
public FileContentResult CreateValidate() { ValidateCode vCode = new ValidateCode(); string code = vCode.CreateValidateCode(5); Session[ "ValidateCode" ] = code; byte [] bytes = vCode.CreateValidateGraphic(code); return File(bytes, "image/JPEG" ); } |
HTML
<a href="javascript:;" onclick="reloadcode();"><img id="safecode" src="/common/CreateValidate" js" id="highlighter_38657">
function
reloadcode() {
var
verify = document.getElementById(
'safecode'
);
verify.setAttribute(
'src'
,
'/common/CreateValidate?'
+ Math.random());
}