Before proceeding with the topic first we must understand "What is a Captcha code?" and "Why do we use them?". Most web sites have a Captcha validation in their sites.

What is the Captcha code?

A Captcha code is simply a combination of some characters and numbers like "Alk13" or "aTu2eP" etc.

Why do we use them?

We use them for validating that the client browser window really has a human typing into it.

Ok, let's get to the topic i.e. creating your own Captcha code in ASP.Net.

Step 1

Go to Visual Studio and create a new project (web site or web application) say "CaptchCode".

Step 2

Now add a new page into your application say "ShowCaptcha.aspx" and add this code into the source for the page:

<div>

<table>

<tr>

<td>

<asp:Image ID="imgCaptcha" runat="server" ImageUrl="~/CreateCaptcha.aspx?New=1"/>

</td>

</tr>

<tr>

<td>

<asp:TextBox ID="txtCaptcha" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td>

<asp:Label ID="lblMessage" runat="server"></asp:Label>

</td>

</tr>

<tr>

<td>

<asp:Button ID="btnCaptcha" runat="server" Text="Validate Cpatcha Code" onclick="btnCaptcha_Click" />

</td>

</tr>

</table>

</div>

Note: Here I am given the ImageUrl="~/CreateCaptcha.aspx?New=1" of the image control. In CreateCaptcha.aspx we will write the code for creating the Captcha code.

Step 3

Now add a new page into your application "CreateCaptcha.aspx" and create the following methods in its .cs file:

/// <summary>

/// method for create captcha image

/// </summary>

private void CreateCaptchaImage()

{

code = GetRandomText();

Bitmap bitmap = new Bitmap(200, 60, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

Graphics g = Graphics.FromImage(bitmap);

Pen pen = new Pen(Color.Yellow);

Rectangle rect = new Rectangle(0, 0, 200, 60);

SolidBrush blue = new SolidBrush(Color.CornflowerBlue);

SolidBrush black = new SolidBrush(Color.Black);

int counter = 0;

g.DrawRectangle(pen, rect);

g.FillRectangle(blue, rect);

for (int i = 0; i < code.Length; i++)

{

g.DrawString(code[i].ToString(), new Font("Tahoma", 10 + rand.Next(15, 20), FontStyle.Italic), black, new PointF(10 + counter, 10));

counter += 28;

}

DrawRandomLines(g);

bitmap.Save(Response.OutputStream, ImageFormat.Gif);

g.Dispose();

bitmap.Dispose();

}

/// <summary>

/// Method for drawing lines

/// </summary>

/// <param name="g"></param>

private void DrawRandomLines(Graphics g)

{

SolidBrush yellow = new SolidBrush(Color.Yellow);

for (int i = 0; i < 20; i++)

{g.DrawLines(new Pen(yellow, 1), GetRandomPoints());}

}

/// <summary>

/// method for gettting random point position

/// </summary>

/// <returns></returns>

private Point[] GetRandomPoints()

{

Point[] points = { new Point(rand.Next(0, 150), rand.Next(1, 150)), new Point(rand.Next(0, 200), rand.Next(1, 190)) };

return points;

}

/// <summary>

/// Method for generating random text of 5 cahrecters as captcha code

/// </summary>

/// <returns></returns>

private string GetRandomText()

{

StringBuilder randomText = new StringBuilder();

string alphabets = "012345679ACEFGHKLMNPRSWXZabcdefghijkhlmnopqrstuvwxyz";

Random r = new Random();

for (int j = 0; j <= 5; j++)

{randomText.Append(alphabets[r.Next(alphabets.Length)]);}

Session["CaptchaCode"] = randomText.ToString();

return Session["CaptchaCode"] as String;

}

Step 4

To validate the Captcha code in the "ShowCaptcha.aspx.cs" page:

protected void btnCaptcha_Click(object sender, EventArgs e)

{

//imgCaptcha.ImageUrl = "~/CreateCaptcha.aspx?New=0";

if (Session["CaptchaCode"] != null && txtCaptcha.Text == Session["CaptchaCode"].ToString())

{

lblMessage.ForeColor = Color.Green;

lblMessage.Text = "Captcha code validated successfully!!";

}

else

{

lblMessage.ForeColor = Color.Red;

lblMessage.Text = "Captcha code is wrong!!";

}

}

I hope this article will be helpful for you.

Happy Coding!!