Hello everyone this is my
first post here so please excuse me if I forget something or don't follow some standard. That being cleared I saw this code for generating
captcha somewhere and I modified it to get
random color for each character and some other small fixes, here is the code:
<?php
error_reporting(E_ALL);
header("Content-type: image/png");
captcha();
function ran_string($length=10){
$string="";
$pattern = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
for($i=0; $i<$length; $i++){
$string .= $pattern[rand(0,61)];
}
return $string;
}
function captcha()
{
$string=ran_string();
$im = imagecreate(100, 50);
$background_color = imagecolorallocate($im, 0, 0, 0);
$text_color =array( imagecolorallocate($im, 255, 0, 0),imagecolorallocate($im, 0, 255, 0),imagecolorallocate($im, 0, 0, 255),imagecolorallocate($im, 255, 255, 255));
for($i=0;$i<count($string);$i++)
{
$x=($i+1)*10;
imagestring($im, 10, $x, 5, $string[$i], $text_color[rand(0,3)]);
}
imagepng($im);
imagedestroy($im);
}
?>
But the output for the above is just one character and if I remove the "for loop" and uncomment the commented portion I get the desired result, please can someone help, I am sorry if this is a
n00b question!!!
EDIT:
It was quite simple and silly of me, I used count($string) where I should have used strlen() anyways the correct version is this:
$font=3;
$spacing=5;
for($i=0;$i<strlen($string);$i++)
{
$x=($i+1)*($font+$spacing);
imagechar($im, $font, $x, 5, $string[$i], $text_color[rand(0,3)]);
}