asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

在ASP.NET下实现数字和字符相混合的验证码


发布日期:2024年08月07日
 
在ASP.NET下实现数字和字符相混合的验证码

经常在论坛里看到有问怎么实现验证码的帖子其实关于验证码的文章在CSDNDEVCLUB等网站上都有很多但是很多文章只讲诉了如何输出一个随机生成数字或字符的图象当然了这个是验证码的核心了但是对很多ASPNET的初学者来说怎么使用它生成的图象又成了一个问题(论坛有不少问这个的)这也是我写本文的一个原因

言归正传关于验证码的原理我就不多说了大家可以参见其他文章文末附有完整的实例代码里面有详细的注释你可以跳过解说文字直接使用

首先我要简要说说Session和ViewState的用法因为后面会用到它

把数据存储在Session中:Session(key)=test

从Session取值:dim testvalue as string=Session(key)

类似的:

把数据存储在ViewState中:ViewState(key)=test

从ViewState中取值:dim testvalue as string=ViewState(key)

关于ViewState的更详细的资料你可以参看MSDN的<<ASPNET ViewState 初探>>一文

百闻不如一见有时代码本身就比任何解说更有表现力所以在此就不对代码解说太多了本文实现的验证码需要用到两个文件:

gifaspx 该文件用于生成验证码

ValidateCodeaspx 该文件用来测试验证码(即如何使用)

下面给出gifaspx的完整代码:

<%@ import namespace=System%>

<%@ import namespace=Systemio%>

<%@ import namespace=SystemDrawing%>

<%@ import namespace=SystemDrawingImaging%>

<script language=vb runat=server>

Sub Page_Load(Sender as objecte as eventargs)

RndNum是一个自定义函数

dim VNum as string=RndNum()

Session(VNum)=VNum

ValidateCode(VNum)

End Sub

生成图象验证码函数

Sub ValidateCode(VNum)

Dim Img as SystemDrawingBitmap

Dim g as Graphics

Dim ms as MemoryStream

dim gheight as integer=Int(Len(VNum)*)

gheight为图片宽度根据字符长度自动更改图片宽度

img=new BitMap(Gheight)

g=GraphicsFromImage(img)

gDrawString(VNum(New Font(Arial))(New SolidBrush(colorblue)))在矩形内绘制字串(字串字体画笔颜色左上x左上y)

ms=New MemoryStream()

imgSave(msImageFormatPng)

ResponseClearContent() 需要输出图象信息 要修改HTTP头

ResponseContentType=image/Png

ResponseBinaryWrite(msToArray())

gDispose()

imgDispose()

ResponseEnd()

End Sub

函数名称:RndNum

函数参数:VcodeNum设定返回随机字符串的位数

函数功能:产生数字和字符混合的随机字符串

Function RndNum(VcodeNum)

dim Vchar as string=ABCDEFGHIJKLMNOPQRSTUWXYZ

dim VcArray() as string=split(Vchar) 将字符串生成数组

dim VNum as string=

dim i as byte

For i= to VcodeNum

Randomize

VNum=VNum & VcArray(Int(*Rnd)) 数组一般从开始读取所以这里为*Rnd

Next

Return VNum

End Function

</script>

那么又应该如何使用该文件生成的图象验证码看这句代码:

<asp:Image id=Image runat=server ImageUrl=gifaspx />

这就是用来显示验证码的Image控件你可以把它放在任何你喜欢的地方下面的给出详细的使用代码你把它保存为ValidateCodeaspx并把它和gifaspx放在同一目录下在浏览器中打开ValidateCodeaspx就可以测试它的效果了:

<script language=vb Runat=Server>

Sub Page_Load(Sender as objecte as eventargs)

dim VNum as string=Session(VNum)

SessionAbandon()

ViewState(VNum)=VNum

End Sub

下面的事件代码是用来测试验证码可以根据需要更改

Sub btnSubmit_click(sender as objecte as eventargs)

判断输入的验证码与所给是否相同

If txtValidateCodetext=Cstr(ViewState(VNum)) then

lblShowtext=<font color=red>提示:验证通过</font>

Else

lblShowtext=所填写的验证码与所给的不符

End If

End Sub

</script>

<html>

<body>

<form runat=server>

<div align=center>

<table width=>

<!DWLayoutTable>

<tr>

<td width= height=>&nbsp; </td>

<td width=>&nbsp;</td>

<td width=>&nbsp;</td>

<td width=>&nbsp;</td>

<td width=>&nbsp;</td>

<td width=>&nbsp;</td>

<td width=>&nbsp;</td>

</tr>

<tr>

<td height=></td>

<td></td>

<td colspan= valign=top><asp:label ID=lblShow runat=server></asp:label></td>

<td>&nbsp;</td>

<td>&nbsp;</td>

</tr>

<tr>

<td height=></td>

<td></td>

<td></td>

<td></td>

<td></td>

<td></td>

<td></td>

</tr>

<tr>

<td height=>&nbsp;</td>

<td colspan= valign=middle>验证码:</td>

<td valign=top><asp:Image id=Image runat=server ImageUrl=gifaspx /></td>

<td>&nbsp;</td>

<td>&nbsp;</td>

<td>&nbsp;</td>

</tr>

<tr>

<td height=>&nbsp;</td>

<td colspan= valign=top>输入验证码:</td>

<td valign=top><asp:textbox ID=txtValidateCode runat=server TextMode=SingleLine /></td>

<td colspan= valign=middle><font color=#FF size=>*注意:区分大小写</font></td>

<td>&nbsp;</td>

</tr>

<tr>

<td height=>&nbsp;</td>

<td>&nbsp;</td>

<td>&nbsp;</td>

<td>&nbsp;</td>

<td>&nbsp;</td>

<td>&nbsp;</td>

<td>&nbsp;</td>

</tr>

<tr>

<td height=>&nbsp;</td>

<td>&nbsp;</td>

<td>&nbsp;</td>

<td valign=top><asp:button ID=btnSubmit runat=server Text=比较 onclick=btnSubmit_click /></td>

<td>&nbsp;</td>

<td>&nbsp;</td>

<td>&nbsp;</td>

</tr>

</table>

</div>

</form>

</body>

</html>

上一篇:利用ASP.NET访问共享网络资源

下一篇:ASP.NET 2.0 中的数据源控件