Следующая статья: Как проверить checkbox на форме?
Ключевые слова: captcha, captcha php, captcha скачать, captcha код, captcha скрипт, captcha ajax / jquery, captcha php скрипт
Имя файла скрипта возьмем и обзовем как sd_captcha.php, хотя название в данном случае как вы сами понимаете особо значения не имеет
<?php
// _____________________________________________________________________________
// Project: SD Core (PHP+Obj)
// Module: «SD Captcha» - защита от роботов
// Author: Zerohold
// Date create: December 2009 year
// Date last change: December 2009 year
// _____________________________________________________________________________
// Описание:
// текущий код хранится в переменной $_SESSION['captcha_code'];
// по умолчанию подразумевается, что у вас открыта какая то сессия и
// вы имеете хоть какое то представление о сессиях (не студенческих ;) )
// из-за некоторых мега супер админов/уродов приходиться делать капчу
// НЕ классом, хотя классом на много круче!!!
// также из-за мега супер админов, которые не знают,
// что есть такая библиотека GD2 давно, приходиться использовать старые функции
// _____________________________________________________________________________
// приставка cap_ чтобы не было нахлеста с другими переменными любого приложения
$cap_width=100;// ширина капчи
$cap_height=30;// высота капчи
$cap_quality=10;// качество изображения, 100 = 100 процентов качество
$cap_length_min=4;// минимальное кол-во символов в коде
$cap_length_max=6;// максимальное кол-во символов в коде
$cap_digital=1;// true (1) - в коде разрешено использовать цифры
$cap_latin_char=0;// true (1) - в коде разрешено использовать латинские символы
$cap_russian_char=0;// true (1) - в коде разрешено использовать русские символы
// _____________________________________________________________________________
function code_generic($_length,$_digital=1,$_latin_char=1,$_russian_char=0)
// генерация пароля
// _legnth - длина пароля
// _digital - 1 разрешена генерация цифр в пароле
// _latin_char - 1 разрешена генерация латинских букв в пароле
// _russian_char - 1 разрешена генерация русский букв в пароле
{
$dig=array(0,1,2,3,4,5,6,7,8,9);// массив с цифрами
// массив с русскими буквами
$rus=array('а','б','в','г','д','е','ж','з','и','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ь','ы','ъ','э','ю','я','ё','й');
// массив с лотинскими буквами
$lat=array('a','b','c','d','e','f','g','h','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$main=array();
// если требуется объединяем массив из цифр
if ($_digital) $main=array_merge($main,$dig);
// если требуется объедениям массив из латинских буковок
if ($_latin_char) $main=array_merge($main,$lat);
// если требуется объеденяем массив из русских буковок
if ($_russian_char) $main=array_merge($main,$rus);
shuffle($main);// перемешать массив в случайном порядке
// вырезаем нужное количество символов из перемешенного массива, и аля паролька готова ;)
$pass=substr(implode('',$main),0,$_length);
return $pass;// возвращаем результат
}// /code_generic
// _____________________________________________________________________________
$l=rand($cap_length_min,$cap_length_max);// определяем кол-во символов в коде
$code=code_generic($l,$cap_digital,$cap_latin_char,$cap_russian_char);// генерируем код
$_SESSION['captcha_code']=$code;// запоминаем код для будущей сверки
$canvas=imagecreatetruecolor($cap_width,$cap_height);// создаем прямоугольник куда и будем рисовать
$c=imagecolorallocate($canvas,150,150,150);// цвет фона заполнения
imagefilledrectangle($canvas,0,0,$cap_width,$cap_height,$c);// заливаем картинку фоновым цветом
$count=strlen($code);// узнаем длину кода
$color_text=imagecolorallocate($canvas,0,0,0);
for($it=0;$it<$count;$it++)// прорисуем каждую буковку
{ $letter=$code[$it];// берем буковку
imagestring($canvas,6,(10*$it+10),$cap_height/4,$letter,$color_text);
// далее по своему желанию коверкаем буковку по любому алгоритму
// добавльяем альфа каналы, шум, гам, переворачиваем под любым углом,
// синусоидите, короче делаете все, на что способен ваш больной мозг.
// рисуем буковку правильно, из-за старого GD использовать эту функцию не можем
// imagettftext($canvas,20,rand(-45,45),10,10,'#FFFFFF','arial.ttf','1');
}
// создаем соответствующий заголовок для корректности вывода изображения
// делаем все так, чтобы браузеры не кэшировали нашу картинку
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0',false);
header('Pragma: no-cache');
header('Content-Type: image/jpeg');
imagejpeg($canvas,null,$cap_quality);// непосредственно создаем картинку
?>
Ну и вызывается это все очень просто: <img src="sd_captcha.php" />