В этой статье я хочу рассказать, как создать капчу. Для своих сайтов, я раньше всегда использовал уже готовые решения. Но сейчас решил разобраться и рассказать, как устроена капча. На самом деле в ней нет ни чего сверхъестественного. Капча – это просто картинка, состоящая из фона и случайных символов. В исходнике есть комментарии, думаю, Вам все будет понятно. Весь исходник состоит их трех файлов, index.php – скрипт проверяющий корректность введенной капчи, capcha.php – скрипт генерирующий капчу иindex.html – форма для ввода капчи.
capcha.php
<?php
//========= Задаем параметры капчи(при желании можно вынести в отдельный файл - config)
//Переменная, в которой храниться список символов. используемых в капче
$let = '0123456789';
// количество символов в капче
$len = 4;
// шрифт символов на капче( шрифт лучше положить в папку со скриптом)
$font = 'impact.ttf';
// Размер шрифта
$fontsize = 20;
// Размер капчи
$width = 100; // - длина
$height = 30; // - высота
//==========
// Задаем заголовок для вывода картинки
header('Content-type: image/png');
// Создаем изображение
$img = imagecreatetruecolor($width, $height);
// фон для капчи
$white = imagecolorallocate($img, 220, 220, 220);
imagefill($img, 0, 0, $white);
// Переменная, для хранения значения капчи
$capchaText = '';
// ========= Заполням изображение символами
for ($i = 0; $i < $len; $i++){
// Из списка символов, берем случайный символ
$capchaText .= $let[rand(0, strlen($let)-1)];
// Вычесляем положение одного символа
$x = ($width - 20) / $len * $i + 10;
$y = $height - (($height - $fontsize) / 2);
// Укажем случайный цвет для символа.
$color = imagecolorallocate($img, rand(0, 150), rand(0, 150), rand(0, 150) );
// Генерируем угол наклона символа
$naklon = rand(-30, 30);
// Рисуем символ
imagettftext($img, $fontsize, $naklon, $x, $y, $color, $font, $capchaText[$i]);
}
// ==========
// Запускаем сессию, и записывем в нее значение капчи. Это понадобится для проверки с тем, что вводит юзер
session_start();
$_SESSION['capcha'] = $capchaText;
// вывод капчи на страницу
imagepng($img);
// чистим память, корторую мы заняли при создании картинки
imagedestroy($img);
?>
index.php
<?php
// старт сессии
session_start();
// Сравниваем введенную капчу с тем, что храниться в сессии
if($_SESSION['capcha'] == $_POST['capcha']){
echo 'Капча верная';
}else {
echo 'Капча не верная';
}
// Удаляем значение капчи из сессии
unset($_SESSION['capcha']);
?>
И сама форма — index.html
<form method="post" action="index.php"> <img src="capcha.php" width="100" height="30" /><br /> Код с картинки: <input type="text" name="capcha" /><br /> <input type="submit" value="Отправить" /> </form>

Хороший скрипт