<?php
session_start();
Class Captcha{
//Send a generated image to the browser
function create_image($string_captcha,$width=130,$height=35)
{
//Let's generate a totally random string using md5
// $md5_hash = md5(rand(0,999));
//We don't need a 32 character long string so we trim it down to 5
// $security_code = substr($md5_hash, 15, 5);
$security_code = $string_captcha;
/* ********************************************
Use this part if you need to Set the session
to store the security code */
$_SESSION['security_code'] = $security_code;
$CodeInd=0;
$arrSecCode=array();
$chars = preg_split('//', $security_code);
$security_code=implode(" ",$chars);
//Set the image width and height
//$width = 130;
//$height = 35;
//Create the image resource
$image = ImageCreate($width, $height);
//We are making three colors, white, black and gray
$arrB=array(0,255,129,10,48,200,186);
$arrR=array(0,255,129,111,48,210,126);
$arrG=array(0,205,139,110,48,5,186);
$black = ImageColorAllocate($image, $arrR[rand(0,6)], $arrG[rand(0,6)], $arrB[rand(0,6)]);
$white = ImageColorAllocate($image, 255, 255, 255);
$grey = ImageColorAllocate($image, 175, 253, 253);
//Make the background black
ImageFill($image, 0, 0, $black);
$font=5;
$arrSel=array(1,2,3,4);
$selectedNum=$arrSel[rand(0,3)];
ImageString($image, $font, 10, 10, $security_code, $white);
//Throw in some lines to make it a little bit harder for any bots to break
ImageRectangle($image,0,0,$width-1,$height-1,$grey);
if($selectedNum == 1 ){
imageline($image, 0, $height/2, $width, $height/5, $grey);
imageline($image, $width/2, 0, $width/3, $height/5, $grey);
imageline($image, $width/2, 0, $width/10, $height, $grey);
imageline($image, $width/2, 0, $width/10, $height/6, $grey);
}
if($selectedNum == 2 ){
imageline($image, $width/1, 0, $width/6, $height, $grey);
imageline($image, 0, $height/5, $width, $height/8, $grey);
imageline($image, 0, $height/5, $width/5, $height/8, $grey);
imageline($image, 0, $height/3, $width, $height, $grey);
}
if($selectedNum == 3 ){
imageline($image, 0, $height, $width, 0, $grey);
imageline($image, 0, 0, $height, $height, $grey);
imageline($image, $width/5, 0, $width/6, $height, $grey);
imageline($image, $width/4, 0, $width/4, $height, $grey);
}
//Tell the browser what kind of file is come in
header("Content-Type: image/jpeg");
//Output the newly created image in jpeg format
ImageJpeg($image);
//Free up resources
ImageDestroy($image);
}
function generateAlphaNumericString($nLength=6){
$strAlphaNumeric="6j4e3s2u5s1";
if( $nLength > 0){
$arrStr= array();
$nChk=rand(1,3);
$capitalLetterArray=array("A","B","C","D","E","G","H","K","M","N","P","Q","R","S","T","X","Y","Z");
$smallLetterArray=array("a","b","c","d","e","g","h","k","m","n","p","q","r","s","t","x","y","z");
// $arrStr[0]=($nChk==2)?chr(rand(97,122)):($nChk==1)?chr(rand(65,90)):rand(1,9);
$arrStr[0]=($nChk==2)?$smallLetterArray[rand(0,17)]:($nChk==1)?$capitalLetterArray[rand(0,17)]:rand(1,9);
for($i=1;$i<$nLength; $i++){
$nInd=$i+1;
if( $nInd%2 == 0){
$arrStr[$i]=rand(1,9);
}else{
$chk=rand(1,2);
if($chk==1){
//$arrStr[$i]=chr(rand(65,90)); //to get all Capital alphabets
$arrStr[$i]=$capitalLetterArray[rand(0,17)];
}else{
//$arrStr[$i]=chr(rand(97,122)); //to get all Small alphabets
$arrStr[$i]=$smallLetterArray[rand(0,17)];
}
}
}
$strAlphaNumeric=implode("",$arrStr);
}
return $strAlphaNumeric;
}
function CaptchaSecurityImages($width,$height,$string_captcha) {
$security_code=$string_captcha;
$_SESSION['security_code'] = $security_code;
$CodeInd=0;
$arrSecCode=array();
$chars = preg_split('//', $security_code);
$code=implode(" ",$chars);
$code="JESUS";
/* font size will be 75% of the image height */
$font_size = $height * 0.75;
$image = imagecreate($width, $height) or die('Cannot initialize new GD image stream');
/* set the colours */
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 20, 40, 100);
$noise_color = imagecolorallocate($image, 100, 120, 180);
/* generate random dots in background */
for( $i=0; $i<($width*$height)/3; $i++ ) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
}
/* generate random lines in background */
for( $i=0; $i<($width*$height)/150; $i++ ) {
imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
}
/* create textbox and add text */
$textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
/* output captcha image to browser */
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
}
}
$obj=new Captcha;
//CaptchaSecurityImages(130,40,$obj->generateAlphaNumericString(6));
$secCode="";
if( isset( $_GET['code'] ) ) $secCode=trim($_GET['code']);
if( $secCode == "" ){
$secCode=$obj->generateAlphaNumericString(5);
if( $secCode == "" ) $secCode="JeSuS";
}
//Usage of function
//$obj->create_image(SecurityCodeText,WidthOfImage,heightOfImage);
$obj->create_image($secCode,130,35);
exit();
//How to use this class?
// Simply call this file imagecaptcha.php as source of an image tag
//eg: <img src=imagecaptcha.php?code=2422 /> parameter code is optional
?>
|