Home > ASP.Net > Create Your Captcha

Create Your Captcha


Hi

try this example to Create Captcha

step1 :- create website and add two pages (Default.aspx and JpegImage.aspx) and Class in App_Code called CaptchaImage.cs

step2 :- in CaptchaImage.cs add the following code

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing.Text;

namespace App_Code {
    /// <summary>
    /// Summary description for CaptchaImage.
    /// </summary>
    public class CaptchaImage {
        // Public properties (all read-only).
        public string Text {
            get { return this.text; }
        }

        public Bitmap Image {
            get { return this.image; }
        }

        public int Width {
            get { return this.width; }
        }

        public int Height {
            get { return this.height; }
        }

        // Internal properties.
        private string text;
        private int width;
        private int height;
        private string familyName;
        private Bitmap image;

        // For generating random numbers.
        private Random random = new Random();

        // ====================================================================
        // Initializes a new instance of the CaptchaImage class using the
        // specified text, width and height.
        // ====================================================================
        public CaptchaImage(string s, int width, int height) {
            this.text = s;
            this.SetDimensions(width, height);
            this.GenerateImage();
        }

        // ====================================================================
        // Initializes a new instance of the CaptchaImage class using the
        // specified text, width, height and font family.
        // ====================================================================
        public CaptchaImage(string s, int width, int height, string familyName) {
            this.text = s;
            this.SetDimensions(width, height);
            this.SetFamilyName(familyName);
            this.GenerateImage();
        }

        // ====================================================================
        // This member overrides Object.Finalize.
        // ====================================================================
        CaptchaImage() {
            Dispose(false);
        }

        // ====================================================================
        // Releases all resources used by this object.
        // ====================================================================
        public void Dispose() {
            GC.SuppressFinalize(this);
            this.Dispose(true);
        }

        // ====================================================================
        // Custom Dispose method to clean up unmanaged resources.
        // ====================================================================
        protected virtual void Dispose(bool disposing) {
            if (disposing)
                // Dispose of the bitmap.
                this.image.Dispose();
        }

        // ====================================================================
        // Sets the image width and height.
        // ====================================================================
        private void SetDimensions(int width, int height) {
            // Check the width and height.
            if (width <= 0)
                throw new ArgumentOutOfRangeException("width", width,
                                                      "Argument out of range, must be greater than zero.");
            if (height <= 0)
                throw new ArgumentOutOfRangeException("height", height,
                                                      "Argument out of range, must be greater than zero.");
            this.width = width;
            this.height = height;
        }

        // ====================================================================
        // Sets the font used for the image text.
        // ====================================================================
        private void SetFamilyName(string familyName) {
            // If the named font is not installed, default to a system font.
            try {
                Font font = new Font(this.familyName, 12F);
                this.familyName = familyName;
                font.Dispose();
            }
            catch (Exception ex) {
                this.familyName = System.Drawing.FontFamily.GenericSerif.Name;
            }
        }

        // ====================================================================
        // Creates the bitmap image.
        // ====================================================================
        private void GenerateImage() {
            // Create a new 32-bit bitmap image.
            Bitmap bitmap = new Bitmap(this.width, this.height, PixelFormat.Format32bppArgb);

            // Create a graphics object for drawing.
            Graphics g = Graphics.FromImage(bitmap);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            Rectangle rect = new Rectangle(0, 0, this.width, this.height);

            // Fill in the background.
            HatchBrush hatchBrush = new HatchBrush(HatchStyle.ZigZag, Color.LightGray, Color.White);
            g.FillRectangle(hatchBrush, rect);

            // Set up the text font.
            SizeF size;
            float fontSize = rect.Height + 1;
            Font font;
            // Adjust the font size until the text fits within the image.
            do {
                fontSize--;
                font = new Font(this.familyName, fontSize, FontStyle.Bold);
                size = g.MeasureString(this.text, font);
            } while (size.Width > rect.Width);

            // Set up the text format.
            StringFormat format = new StringFormat();
            format.Alignment = StringAlignment.Center;
            format.LineAlignment = StringAlignment.Center;

            // Create a path using the text and warp it randomly.
            GraphicsPath path = new GraphicsPath();
            path.AddString(this.text, font.FontFamily, (int) font.Style, font.Size, rect, format);
            float v = 4F;
            PointF[] points =
                {
                    new PointF(this.random.Next(rect.Width)/v, this.random.Next(rect.Height)/v),
                    new PointF(rect.Width - this.random.Next(rect.Width)/v, this.random.Next(rect.Height)/v),
                    new PointF(this.random.Next(rect.Width)/v, rect.Height - this.random.Next(rect.Height)/v),
                    new PointF(rect.Width - this.random.Next(rect.Width)/v,
                               rect.Height - this.random.Next(rect.Height)/v)
                };
            Matrix matrix = new Matrix();
            matrix.Translate(0F, 0F);
            path.Warp(points, rect, matrix, WarpMode.Perspective, 0F);

            // Draw the text.
            hatchBrush = new HatchBrush(HatchStyle.LargeConfetti, Color.LightGray, Color.DarkGray);
            g.FillPath(hatchBrush, path);

            // Add some random noise.
            int m = Math.Max(rect.Width, rect.Height);
            for (int i = 0; i < (int) (rect.Width*rect.Height/30F); i++) {
                int x = this.random.Next(rect.Width);
                int y = this.random.Next(rect.Height);
                int w = this.random.Next(m/50);
                int h = this.random.Next(m/50);
                g.FillEllipse(hatchBrush, x, y, w, h);
            }

            // Clean up.
            font.Dispose();
            hatchBrush.Dispose();
            g.Dispose();

            // Set the image.
            this.image = bitmap;
        }
    }
}

step3 :- in JpegImage.aspx.cs

using System.Drawing.Imaging;
using App_Code;

public partial class JpegImage : System.Web.UI.Page
{
    protected void Page_Load(object sender, System.EventArgs e)
    {
        // Create a CAPTCHA image using the text stored in the Session object.
        CaptchaImage ci = new CaptchaImage(this.Session["CaptchaImageText"].ToString(), 200, 50, "Century

Schoolbook");

        // Change the response headers to output a JPEG image.
        this.Response.Clear();
        this.Response.ContentType = "image/jpeg";

        // Write the image to the response stream in JPEG format.
        ci.Image.Save(this.Response.OutputStream, ImageFormat.Jpeg);

        // Dispose of the CAPTCHA image object.
        ci.Dispose();
    }
}

step4 :- in Default.aspx

<div>
        <strong>Sample Captcha in C# ASP.NET</strong>
        <hr />
        <br />
        <img src="JpegImage.aspx">
        <br />
        <asp:TextBox ID="CaptchaTextBox" runat="server"></asp:TextBox>
        <asp:Button ID="SignupButton" runat="server" Text="Ok" OnClick="SignupButton_Click" />&nbsp;<br />
        <asp:Label ID="Label1" runat="server"></asp:Label>
    </div>

and in code behind :-

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    // For generating random numbers.
    private Random random = new Random();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            // Create a random code and store it in the Session object.
            this.Session["CaptchaImageText"] = GenerateRandomCode();
        }
    }

    //
    // Returns a string of six random digits.
    //
    private string GenerateRandomCode()
    {
        string s = "";
        for (int i = 0; i < 6; i++)
            s = String.Concat(s, this.random.Next(10).ToString());
        return s;
    }

    protected void SignupButton_Click(object sender, EventArgs e)
    {
        if (!Page.IsValid) return;
        if ((CaptchaTextBox.Text == this.Session["CaptchaImageText"].ToString()) && Page.IsValid)
        {
            // Display an informational message.
            //MessageLabel.CssClass = "info";
            Label1.Text = "Correct!";

            //gpstatusbox here...

            //SaveRecord();
        }
        else
        {
            // Display an error message.
            //MessageLabel.CssClass = "error";
            Label1.Text = "ERROR: Incorrect, try again.";

            ////gpstatusbox here...

            // Clear the input and create a new random code.
            CaptchaTextBox.Text = "";
            this.Session["CaptchaImageText"] = GenerateRandomCode();
        }
    }
}

Hope this helps

Good Luck

Advertisements
Categories: ASP.Net Tags:
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: