A jedeme dál ...
Človíčkův Weblog aneb Michal Horák bloguje

Simple Captcha v ASP.NET

 | 12.4.2008

Pro školní projekt jsem dnes dělal nějakou jednoduchou verzi Antispamové kontroly Captcha. Udělal jsem to tak, že jsem si vygeneroval kód a alespoň trošku přeházeně a s různými fonty jej vložil do obrázku, kde ještě matu s barevnými obdelníkčky. Kód jsem uložil do Sessions, abych se k tomu následně dostal a mohl vše zkontrolovat.

Zdrojový kód: Captcha.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace GUI
{
    public partial class Captcha : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "image/gif";
            int sirka = 180;
            int vyska = 80;
            string code = GenerateCode();
            Session["code"] = code;
            string[] fonts = new string[4];
            fonts[0] = "Verdana";
            fonts[1] = "Arial";
            fonts[2] = "Arial Black";
            fonts[3] = "Arial Black";

            Random rand = new Random();
            Bitmap image = new Bitmap(sirka, vyska);
            Graphics g = Graphics.FromImage(image);
            Pen pero = new Pen(Color.BurlyWood, 1);

            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.FillRectangle(Brushes.Black, 0, 0, sirka, vyska);
            for (int i = 0; i < 30; i++)
            {
                g.FillRectangle(Brushes.DarkRed, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.DarkGreen, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.Red, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
                g.FillRectangle(Brushes.Green, rand.Next(0, sirka), rand.Next(0, vyska), rand.Next(7, 15), rand.Next(7, 15));
            }

            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            for (int i = 0; i < 6; i++)
            {
                g.DrawString(code.Substring(i, 1), new Font(fonts[rand.Next(0, 3)], rand.Next(18, 26)), Brushes.White, new Point(i*30, rand.Next(5, 30)));
            }
            image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
            g.Dispose();
            image.Dispose();
        }

        private string GenerateCode() {
            string znaky = "abcdefghijklmnopqrstuvwxyz0123456789";
            string code = string.Empty;

            Random rand = new Random();
            for (int i = 0; i < 6; i++)
            {
                code += znaky.Substring(rand.Next(0, znaky.Length - 1), 1);
            }
            return code;
        }
    }
}

A ověření je již jednoduché stačí dát:

if (kontrolaTextBox.Text == Session["code"].ToString()){}           

Příspěvek vyšel v Sobotu 12.4.2008 13:19 v kategorii Programování a byl 24068x zobrazen. Pokud se vám líbil můžete si jej zalinkovat: Linkuj.cz, Del.icio.us

Komentáře


[1] petr | 15.4.2009 21:19

Gravatar pro petr ahoj

Přidejte svůj komentář

Přidej komentář

Tipy na přečtení

Kategorie

Vyhledávání

Odkazy

Nejčtenější příspěvky za poslední týden

Poslední příspěvky

"A jedeme dál ..." Človíčkův Weblog aneb Michal Horák bloguje. (c) Michal Horák (Človíček webdesign) 2006