境☆静☆净  
叶子轻舞
四叶草的幸福

今天看到一篇生成验证码的文章,试了一下,出来的效果图为,出来的图片背景比较单一,但作者代码写得比较清楚易懂,文章链接: 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)), 33'在矩形内绘制字串(字串,字体,画笔颜色,左上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的链接)
 <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 ObjectByVal 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>&nbsp;
            
<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>&nbsp;
            
<asp:label id="lblshow" runat="server"></asp:label><BR>
            
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></TD>
        
</form>

posted on 2006-06-20 16:20  境☆静☆净  阅读(537)  评论(0编辑  收藏  举报