1)Create a class Captcha which handles the captcha logic like creating dynamic image containing code & generating dynamic codes
using System; using System.Data; using System.Configuration; using System.Linq; 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.Xml.Linq; using System.Drawing; using System.Drawing.Imaging; public class Captcha { private System.Drawing.Image image;//generated image private int width, height; //width,height of the image to be generated private string text = ""; //code private Random random;//for random number generation public Captcha(int w, int h, string text) { width = w; height = h; random = new Random(); this.text = text; this.GenerateImage(); } public System.Drawing.Image CapImage { get { return image; } } // returns the Randomly generated String public static string GenerateRandomCode() { int no = 0; string no1 = ""; Random r = new Random(); no = r.Next(10); no = no * 10 + r.Next(10); no = no * 10 + r.Next(10); char c = (char)r.Next(65, 90); char c1 = (char)r.Next(65, 90); no = no * 10 + r.Next(10); //Convert all number into String no1 = no.ToString(); //Insert the two character into the specified position no1 = no1.Insert(0, c.ToString()); no1 = no1.Insert(2, c1.ToString()); return no1.ToString(); } private void GenerateImage() { // Create a bitmap image. Bitmap bitmap = new Bitmap(this.width, this.height); // Create a graphics object for drawing. Graphics g = Graphics.FromImage(bitmap); //Create Rect Rectangle rect = new Rectangle(0, 0, this.width - 1, this.height - 1); //Create Font Font font = new Font("Arial", width / 8, FontStyle.Italic); // Fill in the background. g.FillRectangle(Brushes.SeaShell, rect); // Set up the text format. StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; //Rotation angle g.RotateTransform(5); //Draw the Text g.DrawString(this.text, font, Brushes.Sienna, rect, format); // Add some random noise. int m = Math.Max(rect.Width, rect.Height); for (int i = 0; i < (int)(rect.Width * rect.Height / 20); 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(Brushes.Gray, x, y, w, h); } // Clean up. g.Dispose(); // Set the image. this.image = bitmap; } } |
2) Create an asp.net page (or instead of using page, you can also use HttpHandler) to output the dynamic image containing code. This page doesn’t required any interface related tags but only contains code in the Page_Load event handler & named it CaptchaGenerator.aspx
protected void Page_Load(object sender, EventArgs e) { //create captcha using width,height & code from the Session Captcha captcha = new Captcha(160, 65, Session["Code"].ToString()); System.Drawing.Image img = captcha.CapImage; //set the response type to the browser Response.ContentType = "image/jpeg"; //send the image to th browser img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); //end the response Response.End(); } |
3) Create a Register page displaying captcha & other registration information:
Design Time Display
Run Time Display
protected void Page_Load(object sender, EventArgs e) { if (Session["Code"] == null) Session["Code"] = Captcha.GenerateRandomCode(); /// if (IsValid) // Response.Write("Verified."); } protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { if (Session["Code"].ToString().Equals(txtCode.Text)) { args.IsValid = true; } else args.IsValid = false; } protected void btnRegister_Click(object sender, EventArgs e) { if (IsValid) { Response.Write("Verified."); } } |
Download Source Code here
No comments:
Post a Comment