ASP.NET网站制作之ASP.NET程序中完成校验码图象天生
刚刚打开这篇专题,猛然见到HAL9000发表的《对于大型公司项目平台选择j2ee的几层认识》系列,深受启发。asp.net|程序 在Web体系中良多时分必要用到校验码,比方我们常常碰到很多电子邮件、论坛的注册历程必要我们输出校验码,这是为了进步平安性。明天我们就来说讲怎样天生校验码。利用ASP.NET来天生校验码图象很便利,网上也有很多教程与文章有先容,可是都讲的太复杂了,不敷有用。我来先容一点本人的思绪,算是举一反三吧。
起首我们来看看,天生校验码的一种罕见体例:
1.天生校验码的字符串
2.将该字符串输入为图象
详细步骤
上面我们就入手下手复杂的例子来先容这个历程,起首翻开VS.NET,新建一个WebSite,增加一个新的WebForm,取名为VCode.aspx,在其代码文件(VCode.aspx.vb)中增加一个函数generateVCode,此函数用于天生校验码的字符串,详细代码以下:
<summary>
发生随机数(包括字母与数字)用于校验码
</summary>
<paramname="CodeLength"></param>
<returns></returns>
<remarks></remarks>
PrivateFunctiongenerateVCode(ByValCodeLengthAsInteger)AsString
DimVCodeAsString=String.Empty
DimrandObjAsNewRandom()
DimcAsInteger=63
ForiAsByte=1ToCodeLength
c=randObj.Next(35)
Ifc>=10Then
c+=7
EndIf
c+=48
VCode+=Chr(c)
Next
ReturnVCode
EndFunction
下面的的函数利用随机数来代表必要发生的校验码,包括数字与年夜写的字母。
接着我们必要将下面天生的校验码字符串作为图象输入。使用ASP.NET的壮大图象处置功效能够很便利的完成这一点。可是思索到间接将校验码天生图象输入,平安性太差,我们必要做一些加强。这里我先容一种复杂的办法,就是为校验码图象增添背景,可使用现有的一些图象作为背景,也能够利用ASP.NET间接画出背景。为了解说的便利,这里我们先容利用ASP.NET间接来画出背景。
起首,图象上输入笔墨之前,能够随即选择一种画笔的笔触(HatchBrush),详细的代码以下:
<summary>
发生随机的笔触款式(用于图象的背景)
</summary>
<returns></returns>
<remarks></remarks>
PrivateFunctiongenerateHatchStyle()AsHatchStyle
DimslistAsNewArrayList
ForEachstyleAsHatchStyleInSystem.Enum.GetValues(GetType(HatchStyle))
slist.Add(style)
Next
DimrandObjAsNewRandom()
DimindexAsInteger=randObj.Next(slist.Count-1)
ReturnCType(slist(index),HatchStyle)
EndFunction
如今校验码字符串已发生,用于图象背景的画笔也有了,我们就先容详细的图象输入,利用函数GenerateVCodeImage来输入图象,
<summary>
发生随机数校验码图象
</summary>
<remarks></remarks>
PrivateFunctionGenerateVCodeImage()
DimoBitmapAsBitmap=NewBitmap(90,35)
DimoGraphicAsGraphics=Graphics.FromImage(oBitmap)
DimforeColorAsSystem.Drawing.Color
DimbackColorAsSystem.Drawing.Color
DimsTextAsString=generateVCode(5)猎取校验码字符串
DimsFontAsString="ComicSansMS"设置本人喜好的字体
远景、背景的色彩
foreColor=Color.FromArgb(220,220,220)
backColor=Color.FromArgb(190,190,190)
设置用于背景的画笔
DimoBrushAsNewHatchBrush(CType(generateHatchStyle(),HatchStyle),foreColor,backColor)
用于输入校验码的画笔
DimoBrushWriteAsNewSolidBrush(Color.Gray)
天生的图象矩形巨细
oGraphic.FillRectangle(oBrush,0,0,100,50)
oGraphic.TextRenderingHint=TextRenderingHint.AntiAlias
DimoFontAsNewFont(sFont,14)
DimoPointAsNewPointF(5.0F,4.0F)
oGraphic.DrawString(sText,oFont,oBrushWrite,oPoint)
Response.ContentType="image/jpeg"
oBitmap.Save(Response.OutputStream,ImageFormat.Jpeg)
oBitmap.Dispose()
ReturnsText
EndFunction
下面先容的都是几个完成详细功效的函数,我们还必要在VCode.aspx的PageLoad事务内里增加挪用这些函数的代码,详细以下:
ProtectedSubPage_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.Load
DimcodeAsString=GenerateVCodeImage()
Session("VCode")=code
EndSub
如今来看看效果,革新几回对照一下,注重背景的分歧:
我们已可以天生校验码的图象了,那末怎样利用呢?上面先容一个复杂的例子申明怎样利用这个VCode.aspx。
在VS.NET中,转到Default.aspx页面增加一个名为:TextBox1的TextBox,在其右侧增加一个Button,ID设置为btnCheck,还要再增加一个用于显现提醒信息的Label,把它的ID设置为lblMessage。最初是我们的重点,增加一个Image控件,设置ImageUrl=VCode.aspx。以上几个步骤设置停止后的参考HTML以下:
<asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>
<asp:ButtonID="btnCheck"runat="server"Text="CheckIt"/>
<asp:LabelID="lblMessage"runat="server"></asp:Label><br/>
<br/>
<asp:ImageID="Image1"runat="server"Height="32px"Width="104px"ImageUrl=VCode.aspx/><br/>
<br/>
固然,我们还必要完成反省用户输出校验码是不是准确,并给出提醒。详细代码以下:
ProtectedSubbtnCheck_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesbtnCheck.Click
DimcodeAsString=Session("VCODE")
IfTextBox1.Text.Trim.ToUpper=codeThen
lblMessage.Text="校验乐成!"
lblMessage.ForeColor=Color.Blue
Else
lblMessage.Text="您输出的注册码毛病!"
lblMessage.ForeColor=Color.Red
EndIf
TextBox1.Text=""
EndSub
详细的效果以下:
总结
上述的办法思索到报告的便利,省略了一些细节。固然我们能够依据详细的使用对上述完成的办法举行一些改善,比方下面先容的字符串天生函数会天生字符O与数字0,会对用户形成搅浑。关于这个成绩,能够在其轮回过程当中增加以下代码办理(不天生数字0,固然也能够选择两个都不天生):
PrivateFunctiongenerateVCode(ByValCodeLengthAsInteger)AsString
DimVCodeAsString=String.Empty
DimrandObjAsNewRandom()
DimcAsInteger=63
ForiAsByte=1ToCodeLength
是不是显现数字:0,由于数字0与字母O简单搅浑
While(c=63)
c=randObj.Next(35)
EndWhile
c=randObj.Next(35)
Ifc>=10Then
c+=7
EndIf
c+=48
VCode+=Chr(c)
Next
ReturnVCode
EndFunction
我们还能够在天生图象的过程当中,利用加倍庞大的办法来加强平安性,经常使用的办法有:
1.在上述图象天生停止后,在图象上增加随机的杂点,大概是随机的线条
2.利用黑色的字体大概背景;
3.利用事后筹办的搅扰性更强的背景;
4.还能够挪动大概扭转每一个字符的地位与角度;
固然我们也能够利用汉字来做校验码,可是用户生怕很难承受吧,哈哈碰到校验码内里的字竟然不熟悉的时分,说不定很抓狂~~。实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍。 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。 ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。 可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
页:
[1]