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
;
}
}
查看全文
相关阅读:
Eclipse的Debug教程
Java面向对象--关键字(package、import、this)
Java面向对象--JavaBean类&UML类图
Java面向对象--构造器(构造方法)
Java面向对象--属性和方法
python | 基础知识与基本概念
post登录 jsessionid 以及cookie 传递
JMeter学习-017-java.net.SocketException: Permission denied: connect 解决方案
python自建模块显示说明与详情
在linux下pycharm无法输入中文
原文地址:https://www.cnblogs.com/gwazy/p/908198.html
最新文章
Sqlcmd的用法
meta http-equiv="refresh" 和13种跳转页面方法
SQL Server远程数据库操作(备份、还原等)
使用Office365账号配置SMTP中继服务器
java网页日期选择框对应的星期有误
angular 路由守卫
angular 8升级到9
实现http反向代理完整流程(go+angular)
go qq邮箱发送
go 发送短信研究
热门文章
go gocolly模块学习
go网络编程获取url所携带的参数值
angular延时函数和数据加载完才显示主要的页面、上传文件到后端、富文本框编辑框(ckeditor)
angular路由学习
Websocket简单运用
Java面向对象--关键字(super、static、final)
Java面向对象--方法的重载和重写
Eclipse的单元测试功能(JUnit)
Java面向对象--三大基本特征之封装性和继承性
Eclipse Debug中step into功能失效问题
Copyright © 2011-2022 走看看