程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET程序中實現校驗碼圖像生成

ASP.NET程序中實現校驗碼圖像生成

編輯:關於ASP.NET

在Web系統中很多時候需要用到校驗碼,例如我們經常遇到不少電子郵件、論壇的注冊過程需要我們輸入校驗碼,這是為了提高安全性。今天我們就來講講如何生成校驗碼。

使用ASP.NET來生成校驗碼圖像很方便,網上也有不少教程與文章有介紹,但是都講的太簡單了,不夠實用。我來介紹一點自己的思路,算是拋磚引玉吧。

首先我們來看看,生成校驗碼的一種常見方式:

1.生成校驗碼的字符串

2.將該字符串輸出為圖像

具體步驟

下面我們就開始簡單的例子來介紹這個過程,首先打開VS.NET,新建一個Web Site,添加一個新的 Web Form,取名為 VCode.aspx,在其代碼文件(VCode.aspx.vb)中添加一個函數generateVCode,此函數用於生成校驗碼的字符串,具體代碼如下:

''' <summary>
''' 產生隨機數(包含字母與數字)用於校驗碼
''' </summary>
''' <param name="CodeLength"></param>
''' <returns></returns>
''' <remarks></remarks>
Private Function generateVCode(ByVal CodeLength As Integer) As String
Dim VCode As String = String.Empty
Dim randObj As New Random()
Dim c As Integer = 63
For i As Byte = 1 To CodeLength
c = randObj.Next(35)
If c >= 10 Then
c += 7
End If
c += 48
VCode += Chr(c)
Next
Return VCode
End Function

上面的的函數使用隨機數來代表需要產生的校驗碼,包含數字與大寫的字母。

接著我們需要將上面生成的校驗碼字符串作為圖像輸出。利用ASP.NET的強大圖像處理功能可以很方便的實現這一點。但是考慮到直接將校驗碼生成圖像輸出,安全性太差,我們需要做一些增強。這裡我介紹一種簡單的方法,就是為校驗碼圖像增加背景,可以使用現有的一些圖像作為背景,也可以使用ASP.NET直接畫出背景。為了講解的方便,這裡我們介紹使用ASP.NET直接來畫出背景。

首先,圖像上輸出文字之前,可以隨即選擇一種畫筆的筆觸(HatchBrush),具體的代碼如下:

''' <summary>
''' 產生隨機的筆觸樣式(用於圖像的背景)
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Function generateHatchStyle() As HatchStyle
  Dim slist As New ArrayList
  For Each style As HatchStyle In System.Enum.GetValues(GetType(HatchStyle))
slist.Add(style)
  Next
  Dim randObj As New Random()
  Dim index As Integer = randObj.Next(slist.Count - 1)
  Return CType(slist(index), HatchStyle)
End Function

現在校驗碼字符串已經產生,用於圖像背景的畫筆也有了,我們就介紹具體的圖像輸出,使用函數GenerateVCodeImage來輸出圖像,

''' <summary>
''' 產生隨機數校驗碼圖像
''' </summary>
''' <remarks></remarks>
Private Function GenerateVCodeImage()
  Dim oBitmap As Bitmap = New Bitmap(90, 35)
  Dim oGraphic As Graphics = Graphics.FromImage(oBitmap)
  Dim foreColor As System.Drawing.Color
  Dim backColor As System.Drawing.Color
  Dim sText As String = generateVCode(5) '獲取校驗碼字符串
  Dim sFont As String = "Comic Sans MS" '設置自己喜歡的字體
  '前景、背景的顏色
  foreColor = Color.FromArgb(220, 220, 220)
  backColor = Color.FromArgb(190, 190, 190)

  '設置用於背景的畫筆
  Dim oBrush As New HatchBrush(CType(generateHatchStyle(), HatchStyle), foreColor, backColor)
  '用於輸出校驗碼的畫筆
  Dim oBrushWrite As New SolidBrush(Color.Gray)
  '生成的圖像矩形大小
  oGraphic.FillRectangle(oBrush, 0, 0, 100, 50)
  oGraphic.TextRenderingHint = TextRenderingHint.AntiAlias
  Dim oFont As New Font(sFont, 14)
  Dim oPoint As New PointF(5.0F, 4.0F)
  oGraphic.DrawString(sText, oFont, oBrushWrite, oPoint)

  Response.ContentType = "image/jpeg"
  oBitmap.Save(Response.OutputStream, ImageFormat.Jpeg)
  oBitmap.Dispose()
  Return sText
End Function

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved