Не так давно меня попросили рассказать, как создать капчу с арифметическими операциями . Поскольку я сам это встречаю достаточно часто на самых различных сайтах, то решил выделить для этого отдельную статью. И из этой статьи Вы узнаете, как создаются капчи с любыми арифметическими операциями .

Капча с арифметическими операциями

Не так давно меня попросили рассказать, как создать капчу с арифметическими операциями. Поскольку я сам это встречаю достаточно часто на самых различных сайтах, то решил выделить для этого отдельную статью. И из этой статьи Вы узнаете, как создаются капчи с любыми арифметическими операциями.

Привожу код такой капчи:

<?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, возникнут хоть какие-то трудности с пониманием создания капчи с арифметическими операциями.