Post updated with more advance version of captcha
This is an updated verstion of the first captcha i made this one is way more secure some up the updates include.
1.Random generated lines
2.Random font size's
3.Blured text['Note the blured text only works in php 5']
4.Random string position
5.Random font family from diff font files
CAPTCHA.PHP
Besure to download the zip file attached this includes the font file
<?php
session_start();
function generate(){
//Create a 35 long char string
$md5 = md5(microtime() * mktime());
//Since we dont need a 35 char long sting cut it down to 8
$string = substr($md5,0,6);
//Creeat image
$captcha = imagecreate(300,120);
//Create array to hold fonts
$font_array = array('ITCKrist.TTF','tallpaul.TTF','Curlz.TTF');
//Create image background color
$background = imagecolorallocate($captcha,000,034,51);
//Create text color
$textcolor = imagecolorallocate($captcha,238,255,255);
//Create line color one
$linecolor = imagecolorallocate($captcha,068,102,051);
//Create line color 2
$linecolor2 = imagecolorallocate($captcha,238,102,068);
//Path to font file to use
$font= $font_array[array_rand($font_array)];
//Set font size
$font_size= mt_rand(30,44);
//Set line thickness
imagesetthickness($captcha,2);
//Create a couple lines to make it hard for robots
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor2);
imageline($captcha,mt_rand(0,300),mt_rand(0,120),mt_rand(0,300),mt_rand(0,120),$linecolor);
//Write random string on image
imagettftext($captcha,$font_size,mt_rand(0,20),5,mt_rand(100,120),$textcolor,$font,$string);
//Session to hold random string
$_SESSION['key'] = $string;
imagefilter( $captcha, IMG_FILTER_GAUSSIAN_BLUR);
//Output image
header("Content-type:image/png");
imagepng($captcha);
//clean up
imagedestroy($captcha);
}
generate();
?>
Pic of the captcha
captcha2.zip