zoukankan
html css js c++ java
验证码控件
自定义控件部分
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Text;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Drawing;
using
System.IO;
using
System.Drawing.Imaging;
namespace
CheckImageLib
{
[DefaultProperty(
"
Text
"
)]
[ToolboxData(
"
<{0}:CheckImages runat=server></{0}:CheckImages>
"
)]
public
class
CheckImages : WebControl
{
[Bindable(
true
)]
[Category(
"
Appearance
"
)]
[DefaultValue(
""
)]
[Localizable(
true
)]
public
string
Text
{
get
{
String s
=
(String)ViewState[
"
Text
"
];
return
((s
==
null
)
?
String.Empty : s);
}
set
{
ViewState[
"
Text
"
]
=
value;
}
}
protected
override
void
Render(HtmlTextWriter output)
{
output.Write(
this
.CreateCheckCodeImage(GenerateCheckCode()));
//
output.Write("");
}
private
string
GenerateCheckCode()
{
int
number;
char
code;
string
checkCode
=
String.Empty;
System.Random random
=
new
Random();
for
(
int
i
=
0
; i
<
5
; i
++
)
{
number
=
random.Next();
if
(number
%
2
==
0
)
code
=
(
char
)(
'
0
'
+
(
char
)(number
%
10
));
else
code
=
(
char
)(
'
A
'
+
(
char
)(number
%
26
));
checkCode
+=
code.ToString();
}
HttpContext.Current.Response.Cookies.Add(
new
HttpCookie(
"
CheckCode
"
, checkCode));
return
checkCode;
}
private
string
CreateCheckCodeImage(
string
checkCode)
{
if
(checkCode
==
null
||
checkCode.Trim()
==
String.Empty)
return
""
;
System.Drawing.Bitmap bm
=
new
System.Drawing.Bitmap((
int
)Math.Ceiling((checkCode.Length
*
12.5
)),
22
);
Graphics bp
=
Graphics.FromImage(bm);
//
生成随机生成器
Random random
=
new
Random();
//
清空图片背景色
bp.Clear(Color.White);
//
画图片的背景噪音线
for
(
int
i
=
0
; i
<
25
; i
++
)
{
int
x1
=
random.Next(bm.Width);
int
x2
=
random.Next(bm.Width);
int
y1
=
random.Next(bm.Height);
int
y2
=
random.Next(bm.Height);
bp.DrawLine(
new
Pen(Color.Silver), x1, y1, x2, y2);
}
Font font
=
new
System.Drawing.Font(
"
Arial
"
,
12
, (System.Drawing.FontStyle.Bold
|
System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush
=
new
System.Drawing.Drawing2D.LinearGradientBrush(
new
Rectangle(
0
,
0
, bm.Width, bm.Height), Color.Blue, Color.DarkRed,
1.2f
,
true
);
bp.DrawString(checkCode, font, brush,
2
,
2
);
//
画图片的前景噪音点
for
(
int
i
=
0
; i
<
100
; i
++
)
{
int
x
=
random.Next(bm.Width);
int
y
=
random.Next(bm.Height);
bm.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//
画图片的边框线
bp.DrawRectangle(
new
Pen(Color.Silver),
0
,
0
, bm.Width
-
1
, bm.Height
-
1
);
FileStream fs
=
new
FileStream(Page.Server.MapPath(Page.Request.Url.AbsolutePath.Replace(
"
.aspx
"
,
"
.jpg
"
)), FileMode.Create);
bm.Save(fs, ImageFormat.Jpeg);
bm.Dispose();
bp.Dispose();
fs.Close();
return
"
<img src=
"
+
Page.Request.Url.AbsolutePath.Replace(
"
.aspx
"
,
"
.jpg
"
)
+
"
></img>
"
;
}
}
}
调用部分
<
form
id
="form1"
runat
="server"
>
<
div
>
<
asp:TextBox
ID
="txtCheckCode"
runat
="server"
></
asp:TextBox
>
<
asp:Label
ID
="lblMessage"
runat
="server"
></
asp:Label
></
div
>
<
asp:Button
ID
="Button1"
runat
="server"
OnClick
="Button1_Click"
Text
="Button"
/>
<
table
>
<
tr
>
<
td
style
=" 7px"
>
<
cc1:CheckImages
ID
="CheckImages1"
runat
="server"
/>
</
td
>
</
tr
>
</
table
>
</
form
>
protected
void
Button1_Click(
object
sender, EventArgs e)
{
if
(Request.Cookies[
"
CheckCode
"
]
==
null
)
{
lblMessage.Text
=
"
您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。
"
;
lblMessage.Visible
=
true
;
return
;
}
if
(String.Compare(Request.Cookies[
"
CheckCode
"
].Value, txtCheckCode.Text,
true
)
!=
0
)
{
lblMessage.Text
=
"
验证码错误,请输入正确的验证码。
"
;
lblMessage.Visible
=
true
;
return
;
}
}
查看全文
相关阅读:
剑指Offer(Java版)第四十六题:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。
剑指Offer(Java版)第四十五题:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
剑指Offer(Java版)第四十四题:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
剑指Offer(Java版)第四十三题:输入一棵二叉树,求该树的深度。 从根结点到叶结点依次经过的结点 (含根、叶结点)形成树的一条路径, 最长路径的长度为树的深度。
剑指Offer(Java版)第四十二题:统计一个数字在排序数组中出现的次数。
剑指Offer(Java版)第四十一题:输入两个链表,找出它们的第一个公共结点。
剑指Offer(Java版)第四十题:在数组中的两个数字,如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出。 即输出P%1000000007
剑指Offer(Java版)第三十九题:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符, 并返回它的位置, 如果没有则返回 -1(需要区分大小写).
剑指Offer(Java版)第三十八题:把只包含质因子2、3和5的数称作丑数(Ugly Number)。 例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。 求按从小到大的顺序的第N个丑数。
【微信支付】退款
原文地址:https://www.cnblogs.com/gwazy/p/908198.html
最新文章
蓝桥杯 ALGO-1:区间k大数查询
蓝桥杯 BASIC-9:特殊回文数
蓝桥杯 BASIC-3:字母图形
51Nod:独木舟问题(贪心)
Codeforces Round #462 (Div. 2) B-A Prosperous Lot
51Nod:活动安排问题之二(贪心)
51Nod:活动安排问题(区间问题)
51Nod:完美字符串
韩信点兵
Lex与Yacc学习(一)之环境配置篇
热门文章
C盘清理小技巧
C++中 #ifdef 和#endif的作用
VS2010 调试C++项目 fatal error LNK1123 错误解决办法
H.264 与 MPEG-4 压缩格式的变革
MPEG-4与H.264的区别 , 编码 以及 应用
MPEG-4视频编码核心思想
视频编码的基本知识
针对多核架构下的并行排序
linux下C++的多线程编程
剑指Offer(Java版)第四十八题:输入一个递增排序的数组和一个数字S,在数组中查找两个数, 使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
Copyright © 2011-2022 走看看