Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: PHP
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)]);
}/*
imagestring($im, 10, 10, 5,  $string[0], $text_color[rand(0,3)]);
imagestring($im, 10, 20, 5,  $string[1], $text_color[rand(0,3)]);
imagestring($im, 10, 30, 5,  $string[2], $text_color[rand(0,3)]);
imagestring($im, 10, 40, 5,  $string[3], $text_color[rand(0,3)]);
imagestring($im, 10, 50, 5,  $string[4], $text_color[rand(0,3)]);
imagestring($im, 10, 60, 5,  $string[5], $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)]);
}
Posted 4-Oct-12 14:18pm
Edited 4-Oct-12 15:01pm
v4
Comments
Scott Clayton at 5-Oct-12 23:26pm
   
Just as a side note, randomizing colors does very little to thwart automated CAPTCHA solvers. In fact it would take only one line to bypass using my CBL scripting language: http://code.google.com/p/captcha-breaking-library/

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 480
1 mhegazy94 460
2 Ravi Bhavnani 190
3 Kornfeld Eliyahu Peter 185
4 Shemeemsha RA 160
0 Sergey Alexandrovich Kryukov 7,135
1 OriginalGriff 6,801
2 CPallini 5,350
3 George Jonsson 3,619
4 Gihan Liyanage 2,797


Advertise | Privacy | Mobile
Web02 | 2.8.140922.1 | Last Updated 4 Oct 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100