Anti Spam Image Generator - CAPTCHA

This sections will contains code regarding different PHP & MySQL features and contains help about php/mysql issues.

Anti Spam Image Generator - CAPTCHA

Postby MT Shahzad on March 18th, 2008, 12:09 pm

Anti-spam Image Generator will render PNG image with code to protect your blog/comments/feedback section from spammers and bots (known as CAPTCHA).

Requirements:
* PHP 4.0.6
* GD 2.0.1 or later
* TTF font to use for rendering code. By default it uses arial.ttf. You can find it online.


Features:
* You can define characters set to use (by default 0123456789)
* Customizable code length (default is 6)
* Easy to use / light server load, not overloaded with features


Sample usage:
* Add this html code where you want to place antispam image: <img src="http://www.website.com/path/to/antispam.php">
* Add field to the html form to enter code, name it anti_spam_code: <input name="anti_spam_code">
* Add following check in the php code to check if user entered CAPTCHA correctly
Code: Select all
@session_start(); // start session if not started yet
if ($_SESSION['AntiSpamImage'] != $_REQUEST['anti_spam_code']) {
  // set antispam string to something random, in order to avoid reusing it once again
  $_SESSION['AntiSpamImage'] = rand(1,9999999);

  // here you add code to let user know incorrect code entered
  ...
}
else {
  // set antispam string to something random, in order to avoid reusing it once again
  $_SESSION['AntiSpamImage'] = rand(1,9999999);

  // everything is fine, proceed with processing feedback/comment/etc.

  ...
}


antispam.php
Code: Select all
<?php
// Font name to use. Make sure it is available on the server.
// You could upload it to the same folder with script if it cannot find font.
// By default it uses arial.ttf font.
$font = 'arial';

// list possible characters to include on the CAPTCHA
$charset = '0123456789';

// how many characters include in the CAPTCHA
$code_length = 6;

// antispam image height
$height = 20;

// antispam image width
$width = 80;

############################################################
#  END OF SETTINGS
############################################################

// this will start session if not started yet
@session_start();

$code = '';
for($i=0; $i < $code_length; $i++) {
  $code = $code . substr($charset, mt_rand(0, strlen($charset) - 1), 1);
}

$font_size = $height * 0.7;
$image = @imagecreate($width, $height);
$background_color = @imagecolorallocate($image, 255, 255, 255);
$noise_color = @imagecolorallocate($image, 20, 40, 100);

/* add image noise */
for($i=0; $i < ($width * $height) / 4; $i++) {
  @imageellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
}
/* render text */
$text_color = @imagecolorallocate($image, 20, 40, 100);
@imagettftext($image, $font_size, 0, 7,17,
              $text_color, $font , $code)
  or die('Cannot render TTF text.');

/* output image to the browser */
header('Content-Type: image/png');
@imagepng($image) or die('imagepng error!');
@imagedestroy($image);
$_SESSION['AntiSpamImage'] = $code;
exit();
?>
MT Shahzad
Web/Software Developer
http://mts.sw3solutions.com
User avatar
MT Shahzad
Site Admin
 
Posts: 300
Joined: February 29th, 2008, 8:11 am
Location: Muridke, Pakistan

Return to PHP / MySQL / XML

Who is online

Users browsing this forum: No registered users and 0 guests