---------html
<td>驗證碼:</td>
<
td
>
<
img
src="/Login/CheckCode?ID=1" id="imgCode" alt="單擊可刷新" onclick="ClickRemoveChangeCode()" />
<
div
style="float:right; margin-top: 5px;">
<
a
href="javascript:void(0)" onclick="ClickRemoveChangeCode();return false;">看不清,換一張</
a
>
</
div
>
</
td
>
-----------jquery
|
1
2
3
4
5
|
//單擊重新改變驗證碼
function
ClickRemoveChangeCode() {
var
code = $(
"#imgCode"
).attr(
"src"
);
$(
"#imgCode"
).attr(
"src"
, code +
"1"
);
}
|
------------asp.net mvc 返回文件地址
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/// <summary>
/// 驗證碼的校驗
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public
ActionResult CheckCode()
{
//生成驗證碼
ValidateCode validateCode =
new
ValidateCode();
string
code = validateCode.CreateValidateCode(4);
Session[
"ValidateCode"
] = code;
byte
[] bytes = validateCode.CreateValidateGraphic(code);
return
File(bytes,
@"image/jpeg"
);
}
/// <summary> string cnum = Session["ValidateCode"] == null ? "": Session["ValidateCode"].ToString(); if (num== cnum && !string.IsNullOrEmpty(num)) |
----生成驗證碼和繪制背景的類
|
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
|
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;
}
//C# MVC 升級版
/// <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;
}
}
|
