ASP.NET(VB) 圖片驗證碼

來源:互聯網
上載者:User
 

根據網友的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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.