Thursday, April 28, 2011

Membuat Captcha dengan vb.net

Saat ini hampir semua aplikasi web menggunakan captcha sebagai salah satu syarat untuk melakukan registrasi menjadi member sebuah web. Captcha merupakan singkatan dari "Completely Automated Public Turing test to tell Computers and Humans Apart". Bentuk dari captcha bermacam – macam, namun mayoritas menggunakan sebuah kombinasi tulisan atau huruf yang diacak.

Dengan VB.Net kita dapat membuat captcha ini sebagai alternatif password pada project VB.Net kita. Berikut cara membuatnya.

1. Buat New Project (Windows Application) dengan sebuah form baru yang berisi:

Picture Box dengan nama PictureBox1. Picture box ini nantinya akan menampung image captcha yang dihasilkan oleh program.

Text box dengan nama Textbox1. Text box ini nantinya akan menampung teks masukan dari user untuk diuji apakan sesuai dengan captcha atau tidak.

Command button dengan nama Button2. Command button ini digunakan untuk membandingkan apakah captcha pada picture box dan teks yang dimasukkan pada text box sesuai atau tidak.



2. Deklarasi yang diperlukan dalam membuat aplikasi captcha ini adalah sebagai berikut:

Public Class Form1


Dim DrawingFont As New Font("Arial", 20)
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


3. Berikutnya adalah sub rutin untuk menghasilkan captcha. Banyaknya karakter yang dihasilkan dalam captcha adalah sebanyak 5 dengan kombinasi huruf besar, huruf kecil dan angka.


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



4. Event-event yang perlu dicegah adalah event untuk load form dan klik pada button2.


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

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If TextBox1.Text = "" Then Exit Sub
If TextBox1.Text = CaptchaString Then
MsgBox("The string is correct." + Chr(13) + "Try another captcha.", MsgBoxStyle.Information)
TextBox1.Clear()
GenerateCaptcha()
Else
MsgBox("The string is incorrect.", MsgBoxStyle.Exclamation)
TextBox1.Clear()
GenerateCaptcha()
End If
End Sub


Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar = Chr(13) Then Button2.PerformClick()
End Sub


5. Tampilan yang didapatkan adalah sebagai berikut :

No comments:

Post a Comment

Thanks for your comment.

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More