kendi imkanlarımız ile evde captcha yapımı

Alan Turing ‘i saygıyla andıktan sonra adım adım ilerleyelim.

1 – Alfa numerik karakterlerimizi oluşturalım:

publicstring CreateCaptchaKey()
{
    string[] chars = { "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "j", "k", "m", "n", "p", "r", "s", "t", "u", "v", "y", "z", "x", "q", "w" };

    Random rand = new Random();
    string captchaKey = "";

    for (int i = 0; i < 5; ++i)
    {
        captchaKey += chars[rand.Next(0, chars.Length)];
    }
    return captchaKey;
}

1,i ve l karakterlerini bilinçli olarak kaldırdım.

2 – Ürettiğimiz karakterlerden GDI+ ile grafik dosyası oluşturalım:

public byte[] CreateImage(string key)
{
    Random rnd = new Random();
    Bitmap bmp = new Bitmap(200, 80);
    Graphics g = Graphics.FromImage(bmp);
    g.Clear(Color.White);
    Font f = new Font("Arial", 34, FontStyle.Bold);
    Font fa = new Font("Arial", 18, FontStyle.Bold);
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

    g.FillEllipse(new SolidBrush(Color.FromArgb(125, 255, 0, 0)), -10, -10, 80, 80);
    g.FillEllipse(new SolidBrush(Color.FromArgb(85, 85, 119, 100)), 60, -10, 60, 60);
    g.FillEllipse(new SolidBrush(Color.FromArgb(161, 173, 185, 9)), 90, 0, 80, 80);

    var colorArray = new Color[] { Color.Red, Color.Green, Color.Blue, Color.Purple, Color.Orange };
    int left = 10;

    for (int i = 0; i < colorArray.Length; i++)
    {
        var color = colorArray[rnd.Next(5)];
        var harf = key[i].ToString();

        if (i % 2 == 0)
        {
            g.RotateTransform(5);
            g.DrawString(harf, f, new SolidBrush(color), left, 10);
        }
        else
        {
            g.RotateTransform(-3);
            g.DrawString(harf, fa, new SolidBrush(color), left, 10);
        }
        left += 30;
    }
    MemoryStream mem = new MemoryStream();
    bmp.Save(mem, ImageFormat.Png);
    return mem.ToArray();
}

3 – Oluşan grafik dosyasını arayüze ekleyelim;

<!-- login.cshtml -->
<!-- formun uygun bir yerine koyabilirsiniz -->
<div class="form-group">
    <div class="col-xs-12" style="text-align:center;">
         <img src="/Account/CreateImage" style="cursor:pointer" onclick="reloadR()" class="captcha" />
    </div>
</div>
<!-- sayfanı en altına ekleyin -->
<script>
    //yenilemek için kullanılacak
    function reloadR() {
        $(".captcha").removeAttr("src").attr("src", "/Account/CreateImage?Id=" + Math.floor((Math.random() * 100) + 1));
    }
</script>

//login controller

[AllowAnonymous]
public ActionResult CreateImage()
{
    var captchaKey = StringHelper.CreateCaptchaKey();
    Session["CaptchaKey"] = captchaKey;
    return File(GdiHelper.CreateImage(captchaKey), "image/png");
}

geriye sadece formu gönderdiğimiz action da kontrol etmek kaldı. Orası da sizin yoğurt yiyişiniz.

Bir cevap yazın

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