学无止境

-------至弱即为至强!

导航

VB.NET验证码生成代码

Posted on 2006-07-06 15:00  赵国亮  阅读(1948)  评论(1编辑  收藏  举报
前台代码为:
    <asp:image id="Image2" runat="server" ImageUrl="ValidateCode.aspx">
ValidateCode.aspx文件的代码为:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            list()
        End Sub
        Function list()
            
'在此处放置初始化页的用户代码
            'rndnum是一个自定义函数
            Dim vnum As String = rndnum(4)
            Session(
"vnum"= vnum
            validatecode(vnum)
        End Function
        
'生成图象验证码函数
        Sub validatecode(ByVal vnum)
            Dim img As System.drawing.Bitmap
            Dim g As Graphics
            Dim r As Random 
= New Random
            Dim gheight As Integer 
= Int(Len(vnum) * 13)
            
''gheight为图片宽度,根据字符长度自动更改图片宽度
            img 
= New Bitmap(gheight, 20)
            g 
= Graphics.FromImage(img)
            
'g.DrawString(vnum, New System.Drawing.Font("Arial", 10), New System.Drawing.SolidBrush(Color.Blue), 3, 3)
            '新增,修改
            '画图片的背景噪音线
            'For i As Integer = 0 To 25
            For i As Integer = 0 To 10
                Dim x1 As Integer
                x1 
= r.Next(img.Width)
                Dim x2 As Integer 
= r.Next(img.Width)
                Dim y1 As Integer 
= r.Next(img.Height)
                Dim y2 As Integer 
= r.Next(img.Height)
                g.DrawLine(New Pen(Color.Silver), x1, y1, x2, y2)
            Next i
            Dim font As font
            font 
= New System.Drawing.Font("Arial"12)
            Dim brush As System.Drawing.Drawing2D.LinearGradientBrush
            brush 
= New System.Drawing.Drawing2D.LinearGradientBrush(New Rectangle(00, img.Width, img.Height), Color.Blue, Color.Blue, 1.2F, True)
            g.DrawString(vnum, font, brush, 
22)

            
''画图片的前景噪音点 
            
'For ii As Integer = 0 To 100
            '    Dim x As Integer = r.Next(img.Width)
            '    Dim y As Integer = r.Next(img.Height)
            '    img.SetPixel(x, y, Color.FromArgb(r.Next()))
            'Next

            
'画图片的边框线 
            g.DrawRectangle(New Pen(Color.Silver), 00, img.Width - 1, img.Height - 1)

            
'在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y) 
            Dim ms1 As System.IO.MemoryStream
            ms1 
= New System.IO.MemoryStream
            img.Save(ms1, System.Drawing.Imaging.ImageFormat.Png)
            Response.ClearContent() 
'需要输出图象信息 要修改HTTP头 
            Response.ContentType = "image/Png"
            Response.BinaryWrite(ms1.ToArray())
            g.Dispose()
            img.Dispose()
            Response.End()

        End Sub
        
'--------------------------------------------
        '函数名称:rndnum
        '函数参数:vcodenum--设定返回随机字符串的位数
        '函数功能:产生数字和字符混合的随机字符串
        '--------------------------------------------
        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 vchar As String = "2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,N,P,Q,R,S,T,U,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
                vnum 
= vnum & vcarray(Int(29 * Rnd())) '数组一般从0开始读取,所以这里为35*rnd
            Next
            Return vnum
        End Function