根據網友的C#.NET圖片驗證改為VB.NET而已,由於VB.NET不支援unchecked,故去掉了按時間種子產生隨機數的函
數部分。測試中並無出現相同的驗證碼。
ValidCode.vb
--------------
Imports System
Imports System.Drawing
Imports System.Web
Imports System.Web.UI
Public Class ValidCode
Inherits Page
'輸入驗證圖片
Public Sub DrawImage()
Dim theCode As String
theCode = RndNum(4)
HttpContext.Current.Session("ValidCode") = theCode '儲存驗證碼到Session,以便驗證。
CreateValidImage(theCode)
End Sub
'產生驗證圖片
'參數:checkCode 驗證字元
Private Sub CreateValidImage(checkCode As String)
Dim iWidth As Integer = checkCode.Length * 15
Dim image As New Bitmap(iWidth, 25) '圖片大小
Dim g As Graphics = Graphics.FromImage(image)
g.Clear(Color.White)
'定義顏色
Dim c As Color() = {Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Red,
Color.Brown, Color.DarkCyan, Color.Purple}
'定義字型
Dim font As String() = {"Verdana","System","Comic Sans MS","Arial","宋體"}
'隨機輸出噪點
Dim rand As New Random()
Dim i As integer
For i = 0 To 49
Dim x As Integer = rand.Next(image.Width)
Dim y As Integer = rand.Next(image.Height)
g.DrawRectangle( New Pen(Color.LightGray,0), x, y, 1, 1)
Next
'輸出不同字型和顏色的驗證碼字元
Dim j As Short
For j = 0 To checkCode.Length - 1
Dim cIndex As Short = rand.Next(8) '隨機顏色
Dim fIndex As Short = rand.Next(5) '隨機字型
Dim f As New Font(font(fIndex), 12, FontStyle.Regular) '12磅,斜體
Dim b As New SolidBrush(c(cIndex)) '定義單色畫刷
Dim PointY As Integer = 4
If (j+1) Mod 2 = 0 Then
PointY = 2
End If
g.DrawString(checkCode.SubString(j,1), f, b, 3+(j*13), PointY)
Next
'畫外框
g.DrawRectangle(New Pen(Color.Gray,0), 0, 0, image.Width-1, image.Height-1)
'輸出到瀏覽器
Dim msOutput As New System.IO.MemoryStream()
image.Save(msOutput, Imaging.ImageFormat.Jpeg)
HttpContext.Current.Response.ClearContent()
HttpContext.Current.Response.ContentType = "image/Jpeg"
HttpContext.Current.Response.BinaryWrite(msOutput.ToArray())
'釋放
g.Dispose()
image.Dispose()
End Sub
'產生隨機字母或數字組合
'參數:VCodeNum 產生隨機字母或數位個數
Private Function RndNum(VCodeNum As Short) As String
Dim VChar As String
VChar = "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,v,w,x,y,z," & _
"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
Dim VCharArray As String() = VChar.Split(",")
Dim ArrayLength As Integer = VCharArray.Length '數組長度
Dim rand As New Random()
Dim rndInt As Integer '隨機數
Dim CodeNum As String = "" '用於返回結果
Dim i As Integer
For i = 0 To VCodeNum - 1
rndInt = rand.Next(ArrayLength)
CodeNum &= VCharArray(rndInt)
Next
Return CodeNum
End Function
End Class
------------
ImageCode.aspx
<%@ Page Language="VB" Inherits="ValidCode" Src="ValidCode.vb" %>
<script runat="server">
Sub Page_Load()
Dim imgCode As New ValidCode
imgCode.DrawImage()
End Sub
</script>
------------
Login.aspx
<script language="vb" runat="server">
Sub ChangeCode_Click(s as Object, e as EventArgs)
ImageCode.DataBind()
End Sub
</script>
<body><form runat="server">
<p><asp:TextBox ID="code" runat="server" />
<asp:Image ID="ImageCode" ImageUrl="ImageCode.aspx" runat="server" />
<p><asp:LinkButton ID="ChangeCode" Text="看不清楚?換一個驗證碼" OnClick="ChangeCode_Click"
runat="server" />
</form>
</body>
-----------
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1465934