仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 710|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之ASP.NET程序中完成校验码图象天生

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:35:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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倍。
小女巫 该用户已被删除
沙发
发表于 2015-1-18 08:47:26 来自手机 | 只看该作者
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-21 14:52:58 来自手机 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
山那边是海 该用户已被删除
地板
发表于 2015-1-30 20:08:34 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
谁可相欹 该用户已被删除
5#
发表于 2015-2-6 15:50:22 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
兰色精灵 该用户已被删除
6#
发表于 2015-2-16 23:13:47 | 只看该作者
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
小妖女 该用户已被删除
7#
发表于 2015-3-5 11:40:41 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
深爱那片海 该用户已被删除
8#
发表于 2015-3-12 05:28:49 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
莫相离 该用户已被删除
9#
发表于 2015-3-19 18:15:30 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表