|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
刚刚打开这篇专题,猛然见到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倍。 |
|