---------html
1
2
3
4
5
6
7
|
<
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
|
///
/// 验证码的校验
///
///
///
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"
);
}
|
----生成验证码和绘制背景的类
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()
{
}
///
/// 验证码的最大长度
///
public
int
MaxLength
{
get
{
return
10; }
}
///
/// 验证码的最小长度
///
public
int
MinLength
{
get
{
return
1; }
}
///
/// 生成验证码
///
/// 指定验证码的长度
///
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 升级版
///
/// 创建验证码的图片
///
/// 要输出到的page对象
/// 验证码
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();
}
}
///
/// 得到验证码图片的长度
///
/// 验证码的长度
///
public
static
int
GetImageWidth(
int
validateNumLength)
{
return
(
int
)(validateNumLength * 12.0);
}
///
/// 得到验证码的高度
///
///
public
static
double
GetImageHeight()
{
return
22.5;
}
}
|