另类的验证码
在网上闲逛,在看.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()Sub Page_Load(ByVal sender As System.Object, ByVal 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(0) Is Nothing OrElse Request.QueryString.Item(0) Is 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()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()Function GetImg(ByVal str As String) As Boolean
If str Is Nothing OrElse str Is String.Empty Then str = "Error"
Try
Dim b As New Bitmap(1, 1, 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(0, 0, 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(" ", " ").Replace(vbCrLf, "<br>"))
Return False
End Try
End Function


Private Function RndString()Function RndString(ByVal len As Integer) As 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(0, 9).ToString)
Next
Return str
End Function
它实际上是将值保存在session,然后在登陆的时候判断这个session
先看看它的验证码是怎么写的吧(我实际上只是在这里做个记录,便于以后自己查看)

Imports System.IO
Imports System.Drawing
Imports System.Drawing.Text
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
Private Sub Page_Load()Sub Page_Load(ByVal sender As System.Object, ByVal 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(0) Is Nothing OrElse Request.QueryString.Item(0) Is 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()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()Function GetImg(ByVal str As String) As Boolean
If str Is Nothing OrElse str Is String.Empty Then str = "Error"
Try
Dim b As New Bitmap(1, 1, 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(0, 0, 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(" ", " ").Replace(vbCrLf, "<br>"))
Return False
End Try
End Function

Private Function RndString()Function RndString(ByVal len As Integer) As 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(0, 9).ToString)
Next
Return str
End Function它实际上是将值保存在session,然后在登陆的时候判断这个session
