zoukankan
html css js c++ java
验证码 生成变形的文字
using
System;
using
System.IO;
using
System.Web;
using
System.Web.UI;
using
System.Drawing;
using
System.Drawing.Drawing2D;
using
System.Drawing.Imaging;
namespace
Mis.Pages
{
public
class
think_test:System.Web.UI.Page
{
protected
System.Web.UI.WebControls.TextBox TextBox1;
protected
System.Web.UI.WebControls.Button Button1;
private
Random rand
=
new
Random();
protected
override
void
OnInit(EventArgs e)
{
base
.OnInit(e);
this
.Load
+=
new
System.EventHandler(
this
.Page_Load);
}
private
void
Page_Load(
object
sender, System.EventArgs e)
{
string
checkCode
=
CreateRandomCode(
8
);
Session[
"
CheckCode
"
]
=
checkCode;
CreateImage(checkCode);
}
Web 窗体设计器生成的代码
#region
Web 窗体设计器生成的代码
/**/
///
<summary>
///
设计器支持所需的方法 - 不要使用代码编辑器修改
///
此方法的内容。
///
</summary>
private
void
InitializeComponent()
{
this
.Button1.Click
+=
new
System.EventHandler(
this
.Button1_Click);
this
.Load
+=
new
System.EventHandler(
this
.Page_Load);
}
#endregion
private
string
CreateRandomCode(
int
codeCount)
{
string
allChar
=
"
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z
"
;
string
[] allCharArray
=
allChar.Split(
'
,
'
);
string
randomCode
=
""
;
int
temp
=
-
1
;
for
(
int
i
=
0
; i
<
codeCount; i
++
)
{
if
(temp
!=
-
1
)
{
rand
=
new
Random(i
*
temp
*
((
int
)DateTime.Now.Ticks));
}
int
t
=
rand.Next(
35
);
if
(temp
==
t)
{
return
CreateRandomCode(codeCount);
}
temp
=
t;
randomCode
+=
allCharArray[t];
}
return
randomCode;
}
private
void
TransformG(Graphics g)
{
Matrix myMatrix
=
new
Matrix();
int
num1
=
rand.Next(
80
,
900
);
int
num2
=
rand.Next(
80
,
800
);
float
dd1
=
(
float
)num1;
float
dd2
=
(
float
)num2;
dd1
=
dd1
/
10000
;
dd2
=
dd2
/
10000
;
float
f1
=
(
float
)(dd1);
float
f2
=
(
float
)(dd2);
myMatrix.Shear(f1,f2);
g.MultiplyTransform(myMatrix);
}
private
void
CreateImage(
string
checkCode)
{
int
iwidth
=
(
int
)(checkCode.Length
*
11.5
);
System.Drawing.Bitmap image
=
new
System.Drawing.Bitmap(
150
,
46
);
Graphics g
=
Graphics.FromImage(image);
g.SmoothingMode
=
SmoothingMode.HighQuality;
Font f
=
new
System.Drawing.Font(
"
Arial
"
,
18
, System.Drawing.FontStyle.Regular);
Brush b
=
new
System.Drawing.SolidBrush(Color.LightSlateGray);
Rectangle rect
=
new
Rectangle(
0
,
0
,
150
,
46
);
HatchBrush hatchBrush
=
new
HatchBrush(
HatchStyle.SmallConfetti,
Color.LightGray,
Color.White);
g.FillRectangle(hatchBrush, rect);
Point[] myArray
=
{
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
)),
new
Point(rand.Next(
150
),rand.Next(
46
))
}
;
Pen myPen
=
new
Pen(Color.Blue,
1
);
GraphicsPath myPath
=
new
GraphicsPath();
myPath.AddBeziers(myArray);
g.DrawPath(myPen, myPath);
SizeF size;
float
CPostion
=
1
;
for
(
int
i
=
0
;i
<
checkCode.Length;i
++
)
{
TransformG(g);
size
=
g.MeasureString(checkCode[i].ToString(), f);
g.DrawString(checkCode[i].ToString(), f, b, CPostion,
7
);
CPostion
+=
size.Width
-
1
;
g.ResetTransform();
}
System.IO.MemoryStream ms
=
new
System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
g.Dispose();
image.Dispose();
Response.ClearContent();
Response.ContentType
=
"
image/Jpeg
"
;
Response.BinaryWrite(ms.ToArray());
}
private
void
Button1_Click(
object
sender, System.EventArgs e)
{
}
}
}
查看全文
相关阅读:
php改写session到数据库
mysql UNIX时间戳与日期的相互转换
关于netbeans中的JComboBox(复选框)
Java中数据类型转换
趣味游戏___表示数
C语言 约瑟夫圈问题:N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。
maven——使用阿里云镜像
spring——整合Mybatis
spring——AOP(静态代理、动态代理、AOP)
spring——通过注解显式的完成自动装配
原文地址:https://www.cnblogs.com/ghd258/p/253059.html
最新文章
当前的数值至少占用了几位内存?
我写的第三个程序(进制转换器)
struck的逻辑
【测试基础】软件测试方法多种多样
【测试基础】测试用例的设计方法
【测试基础】测试产出的文档“们”
【测试基础】为人所知的那些事
【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试
【Web自动化测试——代码篇十一】自动化测试模型——线性测试和模块化驱动测试
【Web自动化测试——代码篇十】常用方法——调用JavaScript
热门文章
【Web自动化测试——代码篇九】常用方法——Cookie的操作
【Web自动化测试——代码篇六】常用方法——我们在等待
【Web自动化测试——代码篇七】常用方法——切换
php插入转义与查找转义
php curl操作
文件的递归与删除
JS实现Tab切换
php中bindValue的批量提交sql语句
php pdo_mysql使用方法
PHP防注入转义功能
Copyright © 2011-2022 走看看