As a developer you probably aware of CAPTCHA, It is a type of challenge-response test used in computing to determine whether or not the user is human [CAPTCHA]
In development time we want to implement some CAPTCHA functionalists in your website, Lets check How can we do that
Basic idea is
- Create a image with some letters
- Save that letters in session or cache
- Display our image in web page with textbox
- Validate TextBox value and letter what we saved in session
Function to create image
/// <summary> /// Create image Byte[] /// </summary> /// <returns></returns> public byte[] DrawByte() { byte[] returnByte = { }; Bitmap bitmapImage = new Bitmap(150, 30, PixelFormat.Format32bppArgb); // // Here we generate random string string key = getRandomString(); // // key string adding to Session HttpContext.Current.Session.Add(SessionKey, key); // // Creating image with key using (Graphics g = Graphics.FromImage(bitmapImage)) { g.SmoothingMode = SmoothingMode.HighQuality; Rectangle rect = new Rectangle(0, 0, 150, 30); HatchBrush hBrush = new HatchBrush(HatchStyle.SmallConfetti, Color.LightGray, Color.White); g.FillRectangle(hBrush, rect); hBrush = new HatchBrush(HatchStyle.LargeConfetti, Color.Red, Color.Black); float fontSize = 20; Font font = new Font(FontFamily.GenericSerif, fontSize, FontStyle.Strikeout); float x = 10; float y = 1; PointF fPoint = new PointF(x, y); g.DrawString(key, font, hBrush, fPoint); using (MemoryStream ms = new MemoryStream()) { bitmapImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); returnByte = ms.ToArray(); } } return returnByte; }Now we can chck the function to create session value or random string
/// <summary> /// Generate random string value /// </summary> /// <returns></returns> private string getRandomString() { string returnString = string.Empty; string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; Random rand = new Random(); int length = rand.Next(5, 8); for (int i = 0; i < length; i++) { int pos = rand.Next(0, 62); returnString += letters[pos].ToString(); } return returnString; }Here I am usign one Controller to create Image.. check below for to see my Controller
namespace CaptchaMVC.Controllers { public class CaptchaController : Controller { // // GET: /Captcha/ public ActionResult Index() { CaptchaHelper captchaHelper = new CaptchaHelper(); return File(captchaHelper.DrawByte(), "image/jpeg"); } } }From the View you call
<div class="form-group"> <span class="control-label col-md-2"></span> <div class="col-md-10"> <img src="@Url.Action("Index","Captcha")" alt="image" /> </div> </div>I this example I created a Person Controller and displaying and validating captcha image when someone create a new person. Here I am not including everything but you can download and check the whole code
// // POST: /Person/Create [HttpPost] public ActionResult Create(PersonViewModel person) { try { CaptchaHelper captchaHelper = new CaptchaHelper(); bool success = captchaHelper.Verify(person.Captcha); if (success) { //captcha success } // TODO: Add insert logic here return RedirectToAction("Index"); } catch { return View(); } }-- Happy Coding--
Download Sample