今天看到一篇生成验证码的文章,试了一下,出来的效果图为,出来的图片背景比较单一,但作者代码写得比较清楚易懂,文章链接: Asp.Net生成验证码(vb)
gif.aspx 该文件用于生成验证码
validatecode.aspx 该文件用来测试验证码的使用
gif.aspx的完整代码
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Imaging
Public Class gif
Inherits System.Web.UI.Page
Web 窗体设计器生成的代码
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
'rndnum是一个自定义函数
Dim vnum As String = rndnum(4)
Session("vnum") = vnum
validatecode(vnum)
End Sub
Sub validatecode(ByVal vnum)
Dim img As System.drawing.Bitmap
Dim g As Graphics
Dim ms As MemoryStream
Dim gheight As Integer = Int(Len(vnum) * 11.5)
'gheight为图片宽度,根据字符长度自动更改图片宽度
img = New Bitmap(gheight, 20)
g = Graphics.FromImage(img)
g.DrawString(vnum, (New Font("arial", 10)), (New SolidBrush(Color.Blue)), 3, 3) '在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
ms = New MemoryStream
img.Save(ms, ImageFormat.Png)
Response.ClearContent() '需要输出图象信息 要修改http头
Response.ContentType = "image/png"
Response.BinaryWrite(ms.ToArray())
g.Dispose()
img.Dispose()
Response.End()
End Sub
Function rndnum(ByVal vcodenum)
Dim vchar As String = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,w,x,y,z"
Dim vcarray() As String = Split(vchar, ",") '将字符串生成数组
Dim vnum As String = ""
Dim i As Byte
For i = 1 To vcodenum
Randomize()
vnum = vnum & vcarray(Int(35 * Rnd())) '数组一般从0开始读取,所以这里为35*rnd
Next
Return vnum
End Function
End Class
在另一个页面添加一个image控件,将image连接到gif.aspx,浏览就可以看到效果(如果该页面和gif.aspx不在同一目录下,则要注意imageurl的链接)Imports System.Drawing
Imports System.Drawing.Imaging
Public Class gif
Inherits System.Web.UI.Page
Web 窗体设计器生成的代码
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
'rndnum是一个自定义函数
Dim vnum As String = rndnum(4)
Session("vnum") = vnum
validatecode(vnum)
End Sub
Sub validatecode(ByVal vnum)
Dim img As System.drawing.Bitmap
Dim g As Graphics
Dim ms As MemoryStream
Dim gheight As Integer = Int(Len(vnum) * 11.5)
'gheight为图片宽度,根据字符长度自动更改图片宽度
img = New Bitmap(gheight, 20)
g = Graphics.FromImage(img)
g.DrawString(vnum, (New Font("arial", 10)), (New SolidBrush(Color.Blue)), 3, 3) '在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
ms = New MemoryStream
img.Save(ms, ImageFormat.Png)
Response.ClearContent() '需要输出图象信息 要修改http头
Response.ContentType = "image/png"
Response.BinaryWrite(ms.ToArray())
g.Dispose()
img.Dispose()
Response.End()
End Sub
Function rndnum(ByVal vcodenum)
Dim vchar As String = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,w,x,y,z"
Dim vcarray() As String = Split(vchar, ",") '将字符串生成数组
Dim vnum As String = ""
Dim i As Byte
For i = 1 To vcodenum
Randomize()
vnum = vnum & vcarray(Int(35 * Rnd())) '数组一般从0开始读取,所以这里为35*rnd
Next
Return vnum
End Function
End Class
<asp:image id="image1" runat="server" imageurl="gif.aspx" />
validatecode.aspx.vb的代码
Public Class validatecode
Inherits System.Web.UI.Page
Web 窗体设计器生成的代码
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
Dim vnum As String = Session("vnum")
Session.Abandon()
viewstate("vnum") = vnum
End Sub
Sub btnsubmit_click(ByVal sender As Object, ByVal e As EventArgs)
'判断输入的验证码与所给是否相同
If txtvalidatecode.text = CStr(viewstate("vnum")) Then
lblshow.text = "<font color='red'>提示:验证通过</font>"
Else
lblshow.text = "所填写的验证码与所给的不符"
End If
End Sub
End Class
Inherits System.Web.UI.Page
Web 窗体设计器生成的代码
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
Dim vnum As String = Session("vnum")
Session.Abandon()
viewstate("vnum") = vnum
End Sub
Sub btnsubmit_click(ByVal sender As Object, ByVal e As EventArgs)
'判断输入的验证码与所给是否相同
If txtvalidatecode.text = CStr(viewstate("vnum")) Then
lblshow.text = "<font color='red'>提示:验证通过</font>"
Else
lblshow.text = "所填写的验证码与所给的不符"
End If
End Sub
End Class
validatecode.aspx中html代码
<form id="Form1" method="post" runat="server">
输入验证码:
<asp:textbox id="txtvalidatecode" runat="server" Width="128px" textmode="singleline"></asp:textbox>
<asp:image id="Image2" runat="server" Width="60px" Height="26px" imageurl="gif.aspx"></asp:image>
<asp:button id="btnsubmit" onclick="btnsubmit_click" runat="server" text="比较"></asp:button>
<asp:label id="lblshow" runat="server"></asp:label><BR>
</FONT></TD>
</form>
输入验证码:
<asp:textbox id="txtvalidatecode" runat="server" Width="128px" textmode="singleline"></asp:textbox>
<asp:image id="Image2" runat="server" Width="60px" Height="26px" imageurl="gif.aspx"></asp:image>
<asp:button id="btnsubmit" onclick="btnsubmit_click" runat="server" text="比较"></asp:button>
<asp:label id="lblshow" runat="server"></asp:label><BR>
</FONT></TD>
</form>