Капча? Как два пальца об асфальт....
Как сделать быструю captcha?
Создаем файл в корне сайта pic.php с таким кодом внутри:
<?
if (!isset($_SESSION)) session_start();
$r=rand(1000000,9999999);
$_SESSION['captcha_code']=$r;
for($i=0;$i < 7;$i++)//разбиваем секретный код на массив чисел
$arr[$i]=substr($r,$i,1);
$im=imagecreate(130,40);//создаем картинку
imagecolorallocate($im,255,255,255);
$a=0;
for($i=0;$i < 7;$i++)//наносим код на картинку
{
$color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagestring($im,rand(2,9),$a+=15,rand(0,20),$arr[$i],$color);
}
header("Content-type: image/jpeg");
imagejpeg($im,'',100);//выводим капчу
?>
Данный код будет генерировать нам картинку, и код, изображенный на рисунке сохраняется в переменную $_SESSION. Проверяем, видно ли картинку запросом site.ru/pic.php
Если картинкас цифрами появилась, то все в порядке и идем дальше.
В форме запроса на странице добавляем поле, в которое наш пользователь вводит число с картинки:
Введите число, изображенное на картинке: <img src="/pic.php">
<input type="text" name="captcha_code">
Ну и в скрипте обработчике проверяем, на правильность:
if(!isset($_SESSION)) session_start();
if($_POST != $_SESSION['captcha_code']) echo "Капча введена неверно"; else echo "Капча введена правильно";
Все!
Добавить к вышесказанному можно только еще варианты картинок:
Наклонные цифры:
<?
if (!isset($_SESSION)) session_start();
$r=rand(1000000,9999999);
$_SESSION['captcha_code']=$r;
for($i=0;$i < 7;$i++)//разбиваем секретный код на массив чисел
$arr[$i]=substr($r,$i,1);
$im=imagecreate(130,40);//создаем картинку
$font = 'arial.ttf';
imagecolorallocate($im,255,255,255);
$a=0;
for($i=0;$i < 7;$i++)//наносим код на картинку
{
$color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagettftext($im, 13, rand(-50,50), $a+=14,rand(15,25), $color, $font, $arr[$i]);
}
header("Content-type: image/png");
imagepng($im);//выводим капчу
?>
усложняем квадратами
<?
if (!isset($_SESSION)) session_start();
$r=rand(10000,99999);
$_SESSION['captcha_code']=$r;
for($i=0;$i < 5;$i++)//разбиваем секретный код на массив чисел
$arr[$i]=substr($r,$i,1);
$im=imagecreate(130,40);//создаем картинку
imagecolorallocate($im,255,255,255);
$a=0;
$color_w=imagecolorallocate($im,255,255,255);
$color_g=imagecolorallocate($im,50,50,50);
for($i=0;$i < 5;$i++)//наносим код на картинку
$arr_=imagettftext($im, 20, rand(-30,30), $a+=21, rand(17,33),$color_g,
"../gothica.ttf",$arr[$i]);
for($i=20;$i < =100;$i+=40)//ставим 3 защитных квадратика
rev($im,$i,rand(10,30));
function rev(&$im,$x,$y)//функция реверсии цвета
{
global $color_w,$color_g;
$w=$h=rand(15,30);
for($i=$x-$w/2;$i < $x+$w/2;$i++)
for($k=$y-$h/2;$k < $y+$h/2;$k++,$color_p=imagecolorat($im,$i,$k))
if($color_p>$color_w)
imagesetpixel($im,$i,$k,$color_w);
else
imagesetpixel($im,$i,$k,$color_g);
}
header ("Content-type: image/png");
imagepng($im); //выводим капчу
imagedestroy($im);
?>