另类的验证码

在网上闲逛,在看.NET SOAP加密的时候随便下载了一个源码,结果发现是国人写的一个多用户文件上传管理的系统(天哪,网站上明明写的是.NET SOAP示例代码),但代码不全,让人有点遗憾

先看看它的验证码是怎么写的吧(我实际上只是在这里做个记录,便于以后自己查看)

Imports System.IO
Imports System.Drawing
Imports System.Drawing.Text
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
    
Private Sub Page_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        
If Not IsPostBack Then
            
Dim VerifyName As String = Nothing
            
If Request.QueryString.Count < 1 OrElse Request.QueryString.Item(0Is Nothing OrElse Request.QueryString.Item(0Is String.Empty Then
                VerifyName 
= "VerifyCode"
            Else
                VerifyName 
= Request.QueryString.Item(0)
            
End If
            
Dim str As String = RndString(5)
            
If str Is Nothing OrElse str Is String.Empty Then str = "Error"
            Me.Session.Item(VerifyName) = str
            Me.GetImg(
str)
        
End If
    
End Sub


    
Private Function GetFont() As Font
        
Dim c1 As PrivateFontCollection = Nothing
        
Dim f1 As Font = Nothing
        
Try
            c1 
= New Drawing.text.PrivateFontCollection
            c1.AddFontFile(Me.Server.MapPath(
"./olort.ttf"))
            f1 
= New Font(c1.Families(0), 16.0!, FontStyle.Regular, GraphicsUnit.Pixel)
        
Catch ex As Exception
            f1 
= New Font("verdana"16.0!, FontStyle.Regular, GraphicsUnit.Pixel)
        
End Try
        
Return f1
    
End Function


    
Public Function GetImg(ByVal str As StringAs Boolean
        
If str Is Nothing OrElse str Is String.Empty Then str = "Error"
        Try
            
Dim b As New Bitmap(11, PixelFormat.Format32bppArgb)
            
Dim g As Graphics = Graphics.FromImage(b)
            
Dim f As Font = Me.GetFont
            
Dim sF As SizeF = g.MeasureString(str, f)
            
Dim intw As Integer = CType(sF.Width, Integer)
            
Dim inth As Integer = CType(sF.Height, Integer)
            g.Dispose()
            b.Dispose()

            b 
= New Bitmap(intw, inth, PixelFormat.Format32bppArgb)
            g 
= Graphics.FromImage(b)
            g.SmoothingMode 
= SmoothingMode.AntiAlias
            g.FillRectangle(
New SolidBrush(Color.White), New Rectangle(00, intw, inth))
            g.DrawString(
str, f, New SolidBrush(Color.DarkBlue), 0.0!, 1.0!)

            f.Dispose()

            
Dim ms As New MemoryStream
            b.Save(ms, ImageFormat.Gif)
            
MyBase.Response.ClearContent()
            
MyBase.Response.ContentType = "image/gif"
            MyBase.Response.BinaryWrite(ms.ToArray)
            
MyBase.Response.End()

            g.Dispose()
            b.Dispose()
            
Return True
        
Catch ex As Exception
            Response.
Write(ex.ToString.Replace("    ""&nbsp;&nbsp;&nbsp;").Replace(vbCrLf, "<br>"))
            
Return False
        
End Try
    
End Function


    
Private Function RndString(ByVal len As IntegerAs String
        
Dim int1 As Integer
        
Dim str As String = ""
        Dim rnd1 As Random = New Random
        
For i As Integer = 1 To len
            
str = String.Concat(str, rnd1.Next(09).ToString)
        
Next
        
Return str
    
End Function

它实际上是将值保存在session,然后在登陆的时候判断这个session

posted on 2004-10-29 10:25 小春 阅读(907) 评论(1) 编辑 收藏