Не так давно меня попросили рассказать, как создать капчу с арифметическими операциями . Поскольку я сам это встречаю достаточно часто на самых различных сайтах, то решил выделить для этого отдельную статью. И из этой статьи Вы узнаете, как создаются капчи с любыми арифметическими операциями .
Не так давно меня попросили рассказать, как создать капчу с арифметическими операциями. Поскольку я сам это встречаю достаточно часто на самых различных сайтах, то решил выделить для этого отдельную статью. И из этой статьи Вы узнаете, как создаются капчи с любыми арифметическими операциями.
Привожу код такой капчи:
<?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, возникнут хоть какие-то трудности с пониманием создания капчи с арифметическими операциями.
