Captcha Çizmek

OnimoSReturnS

Yeni üye
7 Ağu 2010
50
0
Captchanın kullanıldığı yerler;

bot engellemeyi amaçlar.
Art arda mesaj ve ya konu açmak isteyen kullanıcıyı kontrol amacıyla kullanılmaktadır.

Program Captcha yenile butonuna basıldığı zaman sürekli değiştirir.
kontrol butonuna basıldığı zaman doğru girildiyse msgbox doğru girilmiştir yazar.
isteyen bundan esinlenerek form1 kısmına bunu koyabilir.
doğru girilirse form2 ye yönlendirir.

dsv3.jpg


Kod:
Imports System.Drawing.Drawing2D
Imports System.Math 'visualbasicdersleri.com
Public Class Form1
#Region "CAPTCHA CİZ"
    Public Function CaptchaCiz(ByVal Metin As String, ByVal Genislik As Integer, ByVal Yukseklik As Integer, ByVal FontAilesi As String, ByVal ArkaStil As HatchStyle, ByVal YaziStil As HatchStyle, ByVal Onrenk As Color, ByVal ArkaRenk As Color) As Bitmap
        Dim bm As New Bitmap(Genislik, Yukseklik)
        Dim gr As Graphics = Graphics.FromImage(bm)
        gr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
        Dim rectf As New RectangleF(0, 0, Genislik, Yukseklik)
        Dim br As Brush 'visualbasicdersleri.com
        br = New HatchBrush(ArkaStil, Color.LightGray, Color.White)
        gr.FillRectangle(br, rectf)
        Dim text_size As SizeF
        Dim the_font As Font
        Dim font_size As Single = Yukseklik + 1
        Do
            font_size -= 1
            the_font = New Font(FontAilesi, font_size, FontStyle.Bold, GraphicsUnit.Pixel)
            text_size = gr.MeasureString(Metin, the_font)
        Loop While (text_size.Width > Genislik) OrElse (text_size.Height > Yukseklik)
        Dim string_format As New StringFormat
        string_format.Alignment = StringAlignment.Center
        string_format.LineAlignment = StringAlignment.Center
        Dim graphics_path As New GraphicsPath
        graphics_path.AddString(Metin, the_font.FontFamily, CInt(Font.Style), the_font.Size, rectf, string_format)
        Dim rnd As New Random
        Dim pts() As PointF = { _'visualbasicdersleri.com
            New PointF(CSng(rnd.Next(Genislik) / 4), CSng(rnd.Next(Yukseklik) / 4)), _
            New PointF(Genislik - CSng(rnd.Next(Genislik) / 4), CSng(rnd.Next(Yukseklik) / 4)), _
            New PointF(CSng(rnd.Next(Genislik) / 4), Yukseklik - CSng(rnd.Next(Yukseklik) / 4)), _
            New PointF(Genislik - CSng(rnd.Next(Genislik) / 4), Yukseklik - CSng(rnd.Next(Yukseklik) / 4)) _
        }
        Dim mat As New Matrix
        graphics_path.Warp(pts, rectf, mat, WarpMode.Perspective, 0)
        br = New HatchBrush(HatchStyle.LargeConfetti, Color.Black, Color.DarkGray)
        gr.FillPath(br, graphics_path)
        Dim max_dimension As Integer = Max(Genislik, Yukseklik)
        For i As Integer = 0 To CInt(Genislik * Yukseklik / 30)
            Dim X As Integer = rnd.Next(Genislik)
            Dim Y As Integer = rnd.Next(Yukseklik)
            Dim W As Integer = CInt(rnd.Next(max_dimension) / 50)
            Dim H As Integer = CInt(rnd.Next(max_dimension) / 50)
            gr.FillEllipse(br, X, Y, W, H)
        Next i
        For i As Integer = 1 To 5
            Dim x1 As Integer = rnd.Next(Genislik)
            Dim y1 As Integer = rnd.Next(Yukseklik)
            Dim x2 As Integer = rnd.Next(Genislik)
            Dim y2 As Integer = rnd.Next(Yukseklik)
            gr.DrawLine(Pens.DarkGray, x1, y1, x2, y2)
        Next i
        For i As Integer = 1 To 5
            Dim x1 As Integer = rnd.Next(Genislik)
            Dim y1 As Integer = rnd.Next(Yukseklik)
            Dim x2 As Integer = rnd.Next(Genislik)
            Dim y2 As Integer = rnd.Next(Yukseklik)
            gr.DrawLine(Pens.LightGray, x1, y1, x2, y2)
        Next i
        graphics_path.Dispose()
        br.Dispose() 'visualbasicdersleri.com
        the_font.Dispose()
        gr.Dispose()

        Return bm
    End Function
#End Region
    Dim chars = "ABCDEFGHIJKLMNOPQRSTyvwxyzabcdefghijklmnopqrstyvwxyz123456789"
    Function RastgeleMetin(ByVal Uzunluk As Integer)
        Dim r, i
        Dim x As String 'visualbasicdersleri.com

        For i = 0 To Uzunluk
            Randomize()
            r = Int((Rnd() * 61) + 1)

            x = x & Mid(chars, r, 1)
        Next i
        Return x
    End Function
    Dim ActCaptcha As String ' Captchayı programda tutacak değişken belirleniyor.
    Private Sub Form1_Load() Handles MyBase.Load
        Ciz()
    End Sub
    Sub Ciz()
        ActCaptcha = RastgeleMetin(5)
        Dim Captcha As Bitmap = CaptchaCiz(ActCaptcha, PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height, Me.Font.FontFamily.Name, HatchStyle.SmallConfetti, HatchStyle.Cross, Color.LightGray, Color.White)
        PictureBox1.Image = Captcha 'visualbasicdersleri.com
    End Sub

    Private Sub Button1_Click() Handles Button1.Click
        Ciz()
    End Sub
    Private Sub Button2_Click() Handles Button2.Click
        If TextBox1.Text = ActCaptcha Then
            MsgBox("Doğru girdiniz.", MsgBoxStyle.Information, "Doğru")
        Else
            MsgBox("Yanlış girdiniz.", MsgBoxStyle.Critical, "Yanlış")
            Ciz()
        End If
    End Sub
End Class
 

hamush

Katılımcı Üye
26 Haz 2012
635
1
Ustam bu çok kolay okunur (yani captcha okuma scriptleri tarafından).. Mutlaka yazının random bir kısmını bant halinde 4-5 piksel ileri veya geri kaydırın...
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.