zoukankan
html css js c++ java
一个生成验证字符或数字的增强类(downmoon)(基于.net1.1)及调用示例
using
System;
using
System.Drawing;
using
System.Drawing.Imaging;
using
System.Web.UI;
using
System.Drawing.Drawing2D;
using
System.IO;
using
System.Text;
using
System.Collections.Specialized;
namespace
Vegnet.Common.Framework.Util
...
{
/**/
///
<summary>
///
生成验证码的类
///
</summary>
调用示例
#region
调用示例
//
* *********************************************调用示例**************************************************
*
作者 downnmoon(邀月) 2006年11月
************************************************************************
//
呈现页面后台
private
void
getNumbers(
int
len)
...
{
ValidateNumber.CurrentLength
=
len;
ValidateNumberAndChar.CurrentNumber
=
ValidateNumberAndChar.CreateValidateNumber(ValidateNumberAndChar.CurrentLength);
string
number
=
ValidateNumberAndChar.CurrentNumber;
ValidateNumberAndChar.CreateValidateGraphic(
this
,number);
HttpCookie a
=
new
HttpCookie(
"
VegnetValidNumber2
"
, number);
Response.Cookies.Add(a);
}
//
验证页面前台
<
asp:TextBox id
=
"
TextBox3
"
runat
=
"
server
"
></
asp:TextBox
>
<
asp:Label id
=
"
Label3
"
runat
=
"
server
"
></
asp:Label
>
<
asp:Button id
=
"
Button3
"
runat
=
"
server
"
Text
=
"
验证
"
></
asp:Button
>
<
IMGsrc
=
"
DispValid.aspx
"
>
//
验证页面后台
private
void
Button3_Click(
object
sender, System.EventArgs e)
...
{
HttpCookieCollection cookies
=
Request.Cookies;
string
tmp
=
cookies[
"
VegnetValidNumber2
"
].Value;
this
.Label3.Text
=
(tmp.Trim().ToLower()
==
TextBox3.Text.Trim().ToLower())
?
"
正确
"
:
"
无效
"
;
}
******************************************************************************************************/
#endregion
public
class
ValidateNumberAndChar
...
{
public
ValidateNumberAndChar()
...
{
}
/**/
///
<summary>
///
验证码的最大长度
///
</summary>
public
static
int
MaxLength
...
{
get
...
{
return
10
;}
}
/**/
///
<summary>
///
验证码的最小长度
///
</summary>
public
static
int
MinLength
...
{
get
...
{
return
1
;}
}
/**/
///
<summary>
///
验证码的前缀
///
</summary>
public
static
string
BaseString
...
{
get
...
{
return
"
VegnetValidNumber
"
;
}
}
/**/
///
<summary>
///
当前字符串长度,主要是为了更换图片时用
///
</summary>
private
static
int
_currentLength
=
5
;
public
static
int
CurrentLength
...
{
get
...
{
return
_currentLength;
}
set
...
{
_currentLength
=
value;
}
}
/**/
///
<summary>
///
当前字符串,主要是为了更换图片时用
///
</summary>
private
static
string
_currentNumber
=
""
;
public
static
string
CurrentNumber
...
{
get
...
{
if
(_currentNumber
!=
""
)
...
{
return
_currentNumber;
}
else
...
{
return
CreateValidateNumber(CurrentLength);
}
}
set
...
{
_currentNumber
=
value;
}
}
/**/
///
<summary>
///
合法字符列表
///
</summary>
private
static
string
strLetters
...
{
get
...
{
return
"
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
"
;
}
}
/**/
///
<summary>
///
生成验证码
///
</summary>
///
<param name="length">
指定验证码的长度
</param>
///
<returns></returns>
public
static
string
CreateValidateNumber(
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="length"></param>
///
<returns></returns>
public
static
string
CreateValidateChar(
int
length)
...
{
StringBuilder s
=
new
StringBuilder();
//
生成起始序列值
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 r
=
new
Random(seeks[i]);
s.Append(strLetters.Substring(r.Next(
0
, strLetters.Length
-
1
),
1
));
}
return
s.ToString();
}
/**/
///
<summary>
///
创建验证码的图片
///
</summary>
///
<param name="containsPage">
要输出到的page对象
</param>
///
<param name="validateNum">
验证码
</param>
public
static
void
CreateValidateGraphic(Page containsPage,
string
validateNum)
...
{
Bitmap image
=
new
Bitmap((
int
)Math.Ceiling(validateNum.Length
*
15
),
25
);
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.GhostWhite),x1,y1,x2,y2);
}
Font font
=
new
Font(
"
Arial
"
,
16
,(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(validateNum,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);
//
输出图片
containsPage.Response.Clear();
containsPage.Response.ContentType
=
"
image/jpeg
"
;
containsPage.Response.BinaryWrite(stream.ToArray());
}
finally
...
{
g.Dispose();
image.Dispose();
}
}
/**/
///
<summary>
///
得到验证码图片的长度
///
</summary>
///
<param name="validateNumLength">
验证码的长度
</param>
///
<returns></returns>
public
static
int
GetImageWidth(
int
validateNumLength)
...
{
return
(
int
)(validateNumLength
*
15
);
}
/**/
///
<summary>
///
得到验证码的高度
///
</summary>
///
<returns></returns>
public
static
double
GetImageHeight()
...
{
return
25
;
}
生成不重复的字条串
#region
生成不重复的字条串
private
string
RandomKey(
int
b,
int
e)
...
{
return
DateTime.Now.ToString(
"
yyyyMMdd-HHmmss-fff-
"
)
+
this
.getRandomID(b,e);
}
private
int
getRandomID(
int
minValue,
int
maxValue)
...
{
Random ri
=
new
Random(
unchecked
((
int
)DateTime.Now.Ticks));
int
k
=
ri.Next(minValue,maxValue);
return
k;
}
private
string
GuidString
...
{
get
...
{
return
Guid.NewGuid().ToString();
}
}
#endregion
}
}
邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。
助人等于自助!
3w@live.cn
查看全文
相关阅读:
小程序-地图-定位在我此时的位置
小程序-地图-标注点固定在某一点
小程序-列表块/类式ul-li格式(1)
表单form-input标签禁止聚焦输入
forEach与jdk8中的lambda, Stream
put get & push pull
事务背书 ACID, CAP, BASE
懒汉式单例要加volatile吗
SpringMVC DeferedResult和servlet3.1 AsyncContext异步请求
netty在rpc MQ中的应用
原文地址:https://www.cnblogs.com/downmoon/p/1019892.html
最新文章
【转】C#获取当前日期时间(转)
C#如何以管理员身份运行程序
bootstrap学习网站
转-[WebServer] Windows操作系统下 Tomcat 服务器运行 PHP 的环境配置
烂泥:U盘安装Centos6.5
烂泥:KVM安装Windows Server 2008 R2使用virtio硬盘
烂泥:KVM中安装Windows Server 2008 R2系统
烂泥:KVM安装centos6.5系统
烂泥:虚拟化KVM安装与配置
烂泥:centos6.4服务器添加新硬盘
热门文章
烂泥:通过vsphere给esxi添加本地硬盘
烂泥:NFS存储与VSphere配合使用
烂泥:SQL Server 2005数据库备份与恢复
烂泥:SQL Server 2005数据库安装
CSS-文本溢出
js-判断当前页面是否在微信浏览器中打开
小程序-判断一天的不同时间段显示不同的内容
小程序-动态设置顶部导航条
彼得·潘
小程序-地图API
Copyright © 2011-2022 走看看