foo site logo

How to implement CAPTCHA with PHP

How to implement CAPTCHA with PHP and GD

So, you have a public submission form on your website (contact page, forum submission,blogs comment form) and need to prevent spam by auto-submitters. Common way to do this is to implement CAPTCHA - an image with randomly generated string (quote from Wikipedia, free online enciclopedia: "A CAPTCHA is a type of challenge-response test used in computing to determine whether the user is human. "CAPTCHA" is an acronym for "Completely Automated Public Turing test to tell Computers and Humans Apart", trademarked by Carnegie Mellon University.")

Simple and quick PHP solution for implemet CAPTCHA:

1) Make a PHP script which will generate a CAPTCHA image:
[?php
session_start();
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
function _generateRandom($length=6){
$_rand_src = array(
array(48,57) //digits
, array(97,122) //lowercase chars
// , array(65,90) //uppercase chars
);
srand ((double) microtime() * 1000000);
$random_string = "";
for($i=0;$i<$length;$i++){
$i1=rand(0,sizeof($_rand_src)-1);
$random_string .= chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1]));
}
return $random_string;
}
$im = @imagecreatefromjpeg("captcha.jpg");
$rand = _generateRandom(3);
$_SESSION['captcha'] = $rand;
ImageString($im, 5, 2, 2, $rand[0]." ".$rand[1]." ".$rand[2]." ", ImageColorAllocate ($im, 0, 0, 0));
$rand = _generateRandom(3);
ImageString($im, 5, 2, 2, " ".$rand[0]." ".$rand[1]." ".$rand[2], ImageColorAllocate ($im, 255, 0, 0));
Header ('Content-type: image/jpeg');
imagejpeg($im,NULL,100);
ImageDestroy($im);
?]

2) Add the following line at the top of the page where you need to implement the CAPTCHA (there should not be any output before this line, except you use php functions ob_start() and ob_end_flush() to turn on output buffering):
<?php session_start(); ?>

3) Add the following line for check is CAPTCHA entered by visitor valid, before the line where you will proceed submitted message:
[?php if($_SESSION["captcha"]==$_POST["captcha"])
{
//CAPTHCA is valid; proceed the message: save to database, send by e-mail ...
echo 'CAPTHCA is valid; proceed the message';
}
else
{
echo 'CAPTHCA is not valid; ignore submission';
}?]

4) Finaly add the CAPTCHA to the form:
[img src="captcha.php" alt="captcha image"][input type="text" name="captcha" size="3" maxlength="3"]

P.S.
notice:

- the tags "[?" and "?]" in code samples above should be replaced to the "<?" and "?>", you may download original article and code sample here: free download php captcha demo

- requirements: a webserver (windows or linux no matter) with PHP engine, with GD (graphic library) support, you may check your php settings with phpinfo() function

- you need some blank jpg image for use it as background for CAPTCHA string

About the Author

4-year PHP developer

Author: Encaps

foo site logo

Your Ad Here

 

Webmaster Related Information & Resource Sites:
Domain Buffs     Parking PPC     PPC Ad Income: Website Monetization     Apache Website Hosting     Design Dirt     Design: CSS Websites     Dynamite Flash     Open Source Web Zine     foo site: Website Coding     php Web Development     American Webmastery     Meta Tag SEO     Target: Page 1 Search Result Rankings     Ad Working     Yahooter?    

 

foo site logo

Web application programming, site scripting, online interactivity & game development.

 

 

Top Sites Catâ„¢ - A Catalog of Top Sites by Rank

Submit Your Site To The Web's Top 50 Search Engines for Free!

Submit Express Button - Search Engine Optimization and SEO Tools.

Search Engine Optimization SEO

Annox Search and Community Portal

Active Search Results