В этой статье я хочу рассказать, как создать капчу. Для своих сайтов, я раньше всегда использовал уже готовые решения. Но сейчас решил разобраться и рассказать, как устроена капча. На самом деле в ней нет ни чего сверхъестественного. Капча – это просто картинка, состоящая из фона и случайных символов. В исходнике есть комментарии, думаю, Вам все будет понятно. Весь исходник состоит их трех файлов, 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>
Хороший скрипт