Captcha Oluşturma

Captcha özellikle sitelere giriş yaparken, sitelerde form vb işlemleri yaparken kullandığımız araçtır. Bunun kullanılmasının sebebi otomatik olarak webde botların herhangi bir siteye yüklenmesini önlemek, böylelikle sitenin gereksiz yavaşlamasının önüne geçmek hedeflenir. Tabi ben ilk cümlemde araç dedim ama bu .net ortamında kullandığımız gibi bir araç düşünmeyin. Aslında bir yöntemdir demek daha doğru. Günümüzde captcha farklı şekillerde olabiliyor. Rakamlardan, harflerden, sembollerden oluşan bir dizi anlamsız kelimeler de olabiliyor, resimler içerisinde istenilen şeyin görünüp görünmediği sorgulanarak da kullanılıyor veya bazen matematiksel işlem veya metin içeren sorular ile de yapılabiliyor.

Bu örneğimizde basit bir captcha oluşturma mantığını ele alacağım. Amacım daha çok random sınıfını ve dizileri bir arada kullanmak aslında.

Şöyle bir senaryomuz olsun, formumda br adet buton ve bir adet label olacak. Butona her basışımda yeni bir captcha oluşturulacak. Captcha oluşturmayı da şu kurala bağlayalım. Toplam 5 karakterden oluşan bir captcha olsun.

  1. Karakter : Büyük Harflerden olacak.
  2. Karakter : Rakamlardan olacak.
  3. Karakter : Küçük harflerden olacak.
  4. Karakter tanımladığım birkaç sembolun içinden olacak.
  5. Karakter : Yine büyük harflerden olacak.

Şimdi butonun click eventinde aşağıdaki kodları yazıyorum. Ama bana ne lazım bi düşünelim.

5 karakteri oluşturmak için bana öncelikle diziler lazım. Büyük harfler, küçük harfler, semboller dizilerimi oluşturacağım. İki tane Büyük harf olacağı için 1. Ve 5. Karakter için aynı diziyi kullanmam yeterli. Rakam için de 0 ila 10 arasında değer üretebilmesi için doğrudan randomda aralık belirtmem yeterli. Dolayısı ile bana 3 tane dizi yeter.

Hadi kodlayalım;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace captchaOrnek
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCaptcha_Click(object sender, EventArgs e)
        {
            //BüyükHarfler, KüçükHarfler ve semboller için dizilerimi oluşturdum.
            string[] BuyukHarfler = {"A", "B", "C", "Ç", "D", "E", "F", "G", "Ğ", "H", "I", "İ", "J", "K", "L", "M", "N", "O", "Ö", "P", "R", "S", "Ş", "T", "U", "Ü", "V", "Y", "Z"};
            string[] KucukHarfler = { "a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "r", "s", "ş", "t", "u", "ü", "v", "y", "z" };
            string[] Semboller = { "+", "-", "/", "*", "!", "#", "$", "%", "½", "{", "[", "/", "(", ")", "]", "=", "}", "?", "<", ">", "|", "@", "~", "¨", "æ", "ß", ",", ";", ":", "." };

            //Random classından rnd nesnemi türettim.
            Random rnd = new Random();

            //dizilerde kaçıncı elemanı ekleyeceğimi belirlemek için değişken tanımlıyorum.
            int sembol1, sembol2, sembol3, sembol4, sembol5;

            //Rakamlar için olan haricinde diğer dizilerde 0. indeksten dizinin uzunluğuna bağlı olan dizi indeks rakamına kadar rastgele değer üretiyorum. Rakamlar için 0 ile10 arasında rakam üretilmesini istiyorum. 
            sembol1 = rnd.Next(0, BuyukHarfler.Length);
            sembol2 = rnd.Next(0, 10);
            sembol3 = rnd.Next(0, KucukHarfler.Length);
            sembol4 = rnd.Next(0, Semboller.Length);
            sembol5 = rnd.Next(0, BuyukHarfler.Length);

            //Daha sonra label üzerinde yazdırma işlemlerimi yapıyorum.
            label1.Text = BuyukHarfler[sembol1] + sembol2.ToString() + KucukHarfler[sembol3] + Semboller[sembol4] + BuyukHarfler[sembol5];         


        }
    }
}

Kodlarımdan görüleceği üzere öncelikle BuyukHarfler, KucukHarfler ve semboller dizileirmi oluşturdum.

Daha sonra Random classından yeni bir nesne türettim.

Dizilerde kaçıncı elemanı label da göstereceğimi belirlemek için değişkenlerimi tanımladım. Çünkü ben rnd nesnesinin Next metodu ile rakam elde edeceğim.

Oluşturduğum değişkenlere, rnd.Next ile değer atama işlemini yaptım. Burada; Rakamlar için olan haricinde diğer dizilerde 0. indeksten dizinin uzunluğuna bağlı olan dizi indeks rakamına kadar rastgele değer üretiyorum. Rakamlar için 0 ile10 arasında rakam üretilmesini istiyorum.

Daha sonra label üzerinde yazma işlemimi yapıyorum.

Captcha Oluşturma

Şimdilik bu kadar 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir