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 3724x zobrazen. Pokud se vám líbil můžete si jej zalinkovat: Linkuj.cz, Del.icio.us

Reklama:

Komentáře


Přidejte svůj komentář

Přidej komentář

Tipy na přečtení

Kategorie

Vyhledávání

Odkazy

Fotoblog

Poslední fotgrafie z fotoblogu

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