[VB.Net] Cách tạo mã Captcha trong Visual Studio


Xin chào các bạn, trong bài đăng này tôi sẽ thảo luận về cách tạo mã xác thực trong một biểu mẫu bằng Visual Studio 2010 (VB.Net).

Captcha là một thử nghiệm phản ứng thử thách được sử dụng trong điện toán để đảm bảo câu trả lời không được tạo ra bởi máy tính. Đầu tiên hãy mở Visual Studio và tạo một dự án mới, sau đó tạo một biểu mẫu với thiết kế như bên dưới


Các Thành Phàn Trong Mẫu :
  • PictureBox
  • TextBox
  • Button
  • Label

Sau đó, đi vào mã và nhập một số thư viện cần thiết:
Imports System.Text
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Drawing.Drawing2D  

Khi hoàn tất, khai báo một số biến toàn cục khi cần
Public Class Form1
 Dim DrawingFont As New Font("Arial", 25)
 Dim CaptchaImage As New Bitmap(140, 40)
 Dim CaptchaGraf As Graphics = Graphics.FromImage(CaptchaImage)
 Dim Alphabet As String = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"   
 Dim CaptchaString, TickRandom As String
 Dim ProcessNumber As Integer
End Class

Sau đó, tạo một hàm cho quá trình tạo mã captcha
Private Sub GenerateCaptcha()
        ProcessNumber = My.Computer.Clock.LocalTime.Millisecond
        If ProcessNumber < 521 Then
            ProcessNumber = ProcessNumber \ 10
            CaptchaString = Alphabet.Substring(ProcessNumber, 1)
        Else
            CaptchaString = CStr(My.Computer.Clock.LocalTime.Second \ 6)
        End If
        ProcessNumber = My.Computer.Clock.LocalTime.Second
        If ProcessNumber < 30 Then
            ProcessNumber = Math.Abs(ProcessNumber - 8)
            CaptchaString += Alphabet.Substring(ProcessNumber, 1)
        Else
            CaptchaString += CStr(My.Computer.Clock.LocalTime.Minute \ 6)
        End If
        ProcessNumber = My.Computer.Clock.LocalTime.DayOfYear
        If ProcessNumber Mod 2 = 0 Then
            ProcessNumber = ProcessNumber \ 8
            CaptchaString += Alphabet.Substring(ProcessNumber, 1)
        Else
            CaptchaString += CStr(ProcessNumber \ 37)
        End If
        TickRandom = My.Computer.Clock.TickCount.ToString
        ProcessNumber = Val(TickRandom.Substring(TickRandom.Length - 1, 1))
        If ProcessNumber Mod 2 = 0 Then
            CaptchaString += CStr(ProcessNumber)
        Else
            ProcessNumber = Math.Abs(Int(Math.Cos(Val(TickRandom)) * 51))
            CaptchaString += Alphabet.Substring(ProcessNumber, 1)
        End If
        ProcessNumber = My.Computer.Clock.LocalTime.Hour
        If ProcessNumber Mod 2 = 0 Then
            ProcessNumber = Math.Abs(Int(Math.Sin(Val(My.Computer.Clock.LocalTime.Year)) * 51))
            CaptchaString += Alphabet.Substring(ProcessNumber, 1)
        Else
            CaptchaString += CStr(ProcessNumber \ 3)
        End If
        ProcessNumber = My.Computer.Clock.LocalTime.Millisecond
        If ProcessNumber > 521 Then
            ProcessNumber = Math.Abs((ProcessNumber \ 10) - 52)
            CaptchaString += Alphabet.Substring(ProcessNumber, 1)
        Else
            CaptchaString += CStr(My.Computer.Clock.LocalTime.Second \ 6)
        End If
        CaptchaGraf.Clear(Color.White)

        For hasher As Integer = 0 To 5
            CaptchaGraf.DrawString(CaptchaString.Substring(hasher, 1), DrawingFont, Brushes.Black, hasher * 20 + hasher + ProcessNumber \ 200, (hasher Mod 3) * (ProcessNumber \ 200))  
        Next
        PictureBox1.Image = CaptchaImage
End Sub

Sau đó, bấm đúp vào Nút 1 để xác định văn bản được nhập trong TextBox bằng với hình ảnh xác thực sẽ xuất hiện trong PictureBox
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
     If TextBox1.Text = CaptchaString Then
         MsgBox("Captcha Correct", MsgBoxStyle.Information)
         TextBox1.Clear()
         GenerateCaptcha()
     Else
         MsgBox("Captcha Incorrect", MsgBoxStyle.Exclamation)
         TextBox1.Clear()
     End If
End Sub

Và cuối cùng, gọi hàm bạn đã tạo vào Form_Load và bấm vào button_2
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   
    GenerateCaptcha()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    GenerateCaptcha()
End Sub

Khi hoàn thành và không có lỗi, chương trình đã sẵn sàng để chạy.

Sẽ cập nhật demo sớm cho mọi người :)







Related Posts