`
jinvasshole
  • 浏览: 769346 次
文章分类
社区版块
存档分类
最新评论

asp.net中验证码的实现

 
阅读更多

主要用到一个类,一个aspx页面,还有一个使用图片验证码的aspx页面。

随机图片生成类:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Drawing;

namespaceSooyie.Common
{
///<summary>
///产生随即图片
///</summary>
publicsealedclassRandImage
{
privateconststringRandCharString="0123456789";
privateintwidth;
privateintheight;
privateintlength;
///<summary>
///默认构造函数,生成的图片宽度为48×24,随即字符串字符个数
///</summary>
publicRandImage():this(48,24,4)
{
}
///<summary>
///指定生成图片的宽和高,默认生成图片的字符串长度为4个字符
///</summary>
///<paramname="width"></param>
///<paramname="height"></param>
publicRandImage(intwidth,intheight):this(width,height,4)
{
}
///<summary>
///指定生成图片的宽和高以及生成图片的字符串字符个数
///</summary>
///<paramname="width"></param>
///<paramname="height"></param>
///<paramname="length"></param>
publicRandImage(intwidth,intheight,intlength)
{
this.width=width;
this.height=height;
this.length=length;
}
///<summary>
///以默认的大小和默认的字符个数产生图片
///</summary>
///<returns></returns>
publicImageGetImage()
{
Bitmapimage
=newBitmap(width,height);
Graphicsg
=Graphics.FromImage(image);
g.Clear(Color.White);
stringrandString="";
Randomrandom
=newRandom();
do
{
//使用DateTime.Now.Millisecond作为生成随机数的参数,增加随机性
randString
+=RandCharString.Substring(random.Next(DateTime.Now.Millisecond)%RandCharString.Length,1);
}
while(randString.Length<4);
floatemSize=(float)width/randString.Length;
Fontfont
=newFont("Arial",emSize,(System.Drawing.FontStyle.Bold|System.Drawing.FontStyle.Italic));
Penpen
=newPen(Color.Silver);
#region画图片的背景噪音线
intx1,y1,x2,y2;

for(inti=0;i<25;i++)
{
x1
=random.Next(image.Width);
y1
=random.Next(image.Height);
x2
=random.Next(image.Width);
y2
=random.Next(image.Height);
g.DrawLine(pen,x1,y1,x2,y2);
}
#endregion

#region画图片的前景噪音点
for(inti=0;i<100;i++)
{
x1
=random.Next(image.Width);
y1
=random.Next(image.Height);
image.SetPixel(x1,y1,Color.FromArgb(random.Next(Int32.MaxValue)));
}
#endregion

g.DrawString(randString,font,Brushes.Red,
2,2);
g.Dispose();
returnimage;

}
}
}

将图片转换成html资源的aspx页面,这个页面前台没有任何代码,主要后台(.cs)的功能。

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.IO;
usingSystem.Drawing;
usingSystem.Drawing.Imaging;
usingSooyie.Common;

publicpartialclassCheckImage:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!Page.IsPostBack)
{
RandImagerandImage
=newRandImage();
System.Drawing.Imageimage
=randImage.GetImage();
System.IO.MemoryStreammemoryStream
=newMemoryStream();
image.Save(memoryStream,ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType
="image/gif";
Response.BinaryWrite(memoryStream.ToArray());
image.Dispose();
Response.End();
}
}
}

下面是怎么使用的例子:

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Login.aspx.cs"Inherits="Admin_Login"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>后台管理用户登录</title>
</head>
<body>
<formid="form1"runat="server">
<div>
<tableborder="0"cellpadding="0"cellspacing="0"width="480">
<tr>
<tdcolspan="2"align="center">
公文管理系统后台登陆
</td>
</tr>
<tr>
<tdstyle="width:83px">
用户名
</td><td>
<asp:TextBoxID="txtUserName"runat="server"></asp:TextBox>
<asp:RequiredFieldValidatorID="RequiredFieldValidator1"runat="server"ControlToValidate="txtUserName"
ErrorMessage
="用户名"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<tdstyle="height:19px;width:83px;">
密码
</td><td>
<asp:TextBoxID="txtPassword"runat="server"TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidatorID="RequiredFieldValidator2"runat="server"ControlToValidate="txtPassword"
ErrorMessage
="密码"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<tdstyle="height:19px;width:83px;">
校验码
</td><td>
<asp:TextBoxID="txtCheckCode"runat="server"></asp:TextBox><imgsrc="CheckImage.aspx"alt="校验码"/>
<asp:RequiredFieldValidatorID="RequiredFieldValidator3"runat="server"ControlToValidate="txtCheckCode"
ErrorMessage
="校验码必填"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<tdstyle="width:83px">
<asp:ButtonID="btnLogin"runat="server"Text="登陆"OnClick="btnLogin_Click"/></td><tdstyle="width:9px">
<inputid="Reset1"type="reset"value="清除"/></td>
</tr>
</table>
</div>
<asp:LiteralID="lStatus"runat="server"Visible="False"></asp:Literal>
</form>
</body>
</html>

请注意:<img src="CheckImage.aspx" alt="校验码" />这一句就使用了CheckImage.aspx.cs类中的功能,将图片通过HTTP输出。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics