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.
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
"A jedeme dál ..." Človíčkův Weblog aneb Michal Horák bloguje. (c) Michal Horák (Človíček webdesign) 2006