Капча с арифметическими операциями
Не так давно меня попросили рассказать, как создать капчу с арифметическими операциями. Поскольку я сам это встречаю достаточно часто на самых различных сайтах, то решил выделить для этого отдельную статью. И из этой статьи Вы узнаете, как создаются капчи с любыми арифметическими операциями.
Привожу код такой капчи:
<?php
session_start(); // Начинаем сессию
$number_1 = rand(1, 100); // Генерируем 1-е случайное число
$number_2 = rand(1, 100); // Генерируем 2-е случайное число
$_SESSION['rand_code'] = $number_1 + $number_2; // Записываем их сумму в сессию
$dir = "fonts/"; // Директория с шрифтами
$image = imagecreatetruecolor(200, 60); // Создаём изображение
$color = imagecolorallocate($image, 200, 100, 90); // Задаём 1-й цвет
$white = imagecolorallocate($image, 255, 255, 255); // Задаём 2-й цвет
imagefilledrectangle($image, 0, 0, 399, 99, $white); // Делаем капчу с белым фоном
imagettftext ($image, 30, 0, 10, 40, $color, $dir."verdana.ttf", "$number_1 + $number_2"); // Пишем текст
header("Content-type: image/png"); // Отсылаем заголовок о том, что это изображение png
imagepng($image); // Выводим изображение
?>
Код хорошо прокомментирован, поэтому что-либо добавлять не буду, но скажу, что абсолютно также создаются любые другие капчи с арифметическими операциями. Никто не мешает поставить, например, знак умножения вместо знака плюса. Также никто не мешает сгенерировать ещё числа и создавать уже целые выражения. Главное, результат записывать в сессию, чтобы потом можно было проверить правильность ввода пользователем.
Выводится капча элементарно:
<img src="captcha.php" alt="" />
Проверка капчи тоже не намного сложнее:
<?php
session_start(); // Начинаем сессию
$captcha = $_POST["captcha"]; // Ответ, который ввёл пользователь
/* Проверяем правильность ввода капчи (не забывайте проверять на "пустое значение", это очень важно!) */
if (($capctha == $_SESSION["rand_code"]) && ($captcha != "")) echo "Капча введена правильно";
else echo "Капча введена неправильно";
?>
Не думаю, что у человека, который знаком хоть немного с PHP, возникнут хоть какие-то трудности с пониманием создания капчи с арифметическими операциями.
-
- Михаил Русаков
Комментарии (6):
После Вашей стать о регистрации и авторизации перешел сразу к капче. Статья хорошая и понятная, только дело вот в чем $dir = "fonts/" ; // Директория с шрифтами <<< дириктория эта папка в которой лежит нобходимый шрифт? и где взять тот или иной шрифт? а еще можно же создать массив в котором будут 4 интекса, это плюс, минус, умножить, делить и через Вами упомянутую в статье случаного вывода функции rand() выводить случайное арифметическое значение?)
Ответить
http://myrusakov.ru/kapcha-php.html
Ответить
боты легко решат эту капчу.... надо шума добавить на картинку. можно ещё зделать смену цвета фона рандом. Для этого где задаем цвет заместо одного цвета прописать rand(1,300); уже интересней становится ))) $color = imagecolorallocate($image, rand(1,300), rand(1,300), rand(1,300)); // Задаём 1-й цвет $white = imagecolorallocate($image, rand(1,300), rand(1,300), rand(1,300)); // Задаём 2-й цвет
Ответить
Хороший урок=)
Ответить
Теоретически, боты решат любую капчу, а данная капча служит для защиты от кого попало, коих 99%, поэтому её достаточно. Впрочем, если нужно ещё 0.9%, то можете и дальше защищать, до 99.9%, а взамен выслушивая справедливое недовольство пользователей.
Ответить
Сергей, лучше оставить эту капчу, а если Вы хотите дополнительную сложность и защиту, тогда Вы можете сделать такое условие: "Если пользователь с одного IP отправляет одну форму более 5 раз, то - усложнить капчу Вашим способом, для предотвращения спама"
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.