We all know what is captcha if you don't know what is, captcha is a word test or more than one word test that is mixed and cannot identify easily that is used to verify human. Okay now we are going to make it first you need to add a class so go ahead and add a class and add the codes below to the class.
Imports System.Text
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Drawing.Drawing2D
Class Captcha
Inherits PictureBox
Public randomstr As String
#Region "Properties"
Private _textcolor As Color = Color.Black
Public Property TextColor() As Color
Get
Return _textcolor
End Get
Set(ByVal value As Color)
_textcolor = value
Invalidate()
End Set
End Property
Private _font As New Font("Segoe UI", 20)
Public Overrides Property Font() As Font
Get
Return _font
End Get
Set(ByVal value As Font)
_font = value
Invalidate()
End Set
End Property
Private _texttouse As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz1234567890"
Public Property RandomCharacters() As String
Get
Return _texttouse
End Get
Set(ByVal value As String)
_texttouse = value
Invalidate()
End Set
End Property
Private _captchalength As Integer = 8
Public Property CaptchaTextLength() As Integer
Get
Return _captchalength
End Get
Set(ByVal value As Integer)
_captchalength = value
Invalidate()
End Set
End Property
Private _numberoflines As Integer = 50
Public Property NumberOfLines() As Integer
Get
Return _numberoflines
End Get
Set(ByVal value As Integer)
_numberoflines = value
Invalidate()
End Set
End Property
#End Region
#Region "Events"
Public Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint, True)
SetStyle(ControlStyles.ResizeRedraw, True)
SetStyle(ControlStyles.UserPaint, True)
SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
SetStyle(ControlStyles.SupportsTransparentBackColor, True)
End Sub
Protected Overrides Sub CreateHandle()
MyBase.CreateHandle()
Me.Size = New Size(241, 69)
Me.BorderStyle = BorderStyle.FixedSingle
End Sub
Public CaptchaText As String = String.Empty
Private rnd As New Random()
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim B As New Bitmap(Width, Height)
Dim G As Graphics = Graphics.FromImage(B)
Dim BoxSize As New Rectangle(0, 0, Me.Width, Me.Height)
Dim txtcolor As Brush = New SolidBrush(Color.FromArgb(rnd.[Next](160, 255), _textcolor))
G.SmoothingMode = SmoothingMode.HighQuality
G.Clear(BackColor)
For I As Integer = 0 To _numberoflines - 1
G.DrawLine(New Pen(Color.FromArgb(rnd.[Next](128, 255), CreateRandomColor())), rnd.[Next](0, BoxSize.Width), rnd.[Next](0, BoxSize.Height), rnd.[Next](BoxSize.Width), rnd.[Next](BoxSize.Height))
Next
Dim SFormat As New StringFormat()
SFormat.Alignment = StringAlignment.Center
SFormat.LineAlignment = StringAlignment.Center
G.RotateTransform(rnd.[Next](-7, 7), MatrixOrder.Append)
randomstr = CreateRandomString()
G.DrawString(randomstr, Font, txtcolor, BoxSize, SFormat)
CaptchaText = randomstr
e.Graphics.DrawImage(B, 0, 0)
G.Dispose()
B.Dispose()
End Sub
#End Region
#Region "Create Randoms"
Private Function CreateRandomColor() As Color
Return Color.FromArgb(100, rnd.[Next](255), rnd.[Next](255), rnd.[Next](255))
End Function
Private Function CreateRandomString() As String
Dim buffer As Char() = New Char(_captchalength - 1) {}
For i As Integer = 0 To _captchalength - 1
If _texttouse = String.Empty Then
Dim newtext As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz1234567890"
buffer(i) = newtext(rnd.[Next](newtext.Length))
Else
buffer(i) = _texttouse(rnd.[Next](_texttouse.Length))
End If
Next
Return New String(buffer)
End Function
#End Region
End Class