Главная / Мой вордпресс / Создаем капчу

Создаем капчу

Создаем капчуДоброго всем времени суток. Разгреб маленько дела и наконец то появилось время черкануть в блог. Долгие циклы статей особого времени писать нету, поэтому решил написать о чем то не таком масштабном.

И мой выбор пал на создание капчи. Тем более, что для блога делать её все равно придется.

Сначала, немного теории. Капча представляет из себя последовательность случайно сгенерированных символов, выводимых на картинке и всячески видоизмененная, для усложнения распознавания её ботами. Она используется в основном для зашиты от спамеров и спамботов.

Читайте: Бесплатные фотостоки и бесплатные фотобанки

Конечно не какая капча не гарантирует 100% защиты от выше перечисленных, но все же жизнь им усложнит. Ну я думаю, что хватит теории, потому что все, так или иначе, встречались с капчами на просторах интернета.

Перейдем сразу к делу. Мы будем создавать, не сложную капчу состоящую из нескольких цифр. Чуть ниже будет приведен код реализации, я постарался его наиболее полно прокомментировать, так что надеюсь, проблем с его пониманием не у кого не возникнет. А вот и наш код.

<?php

// Передаем в заголовок, что результатом работы скрипта является картинка формата jpeg
header("Content-type: image/jpeg");

// Создаем картинку размером 170X40
$img=imagecreatetruecolor(170, 40) or die(Не возможно создать картинку);

// Закрашиваем фон картинки белым цветом
imagefill($img, 0, 0, 0xFFFFFF);

// Задаем начальные параметры (все параметры подбирались экспериментальным путем)
$x = 0; // Координата x
$y = 25; // Координата y
$i = 1;
$n = 5; // Количество цифр использованных в нашей капче
$res = ""; // Результирующая строка которая будет содержать текст капчи
$font = fonts/1979.ttf; // Шрифт которым будет написана наша капча
$minfontsize = 12; // Минимальный размер шрифта
$maxfontsize = 25; // Максимальный размер шрифта
$minfontrate = -35; // Минимальный размер шрифта
$maxfontrate = 35; // Максимальный размер шрифта

// По очереди выводим каждую цифру на картинку
while ($i++ <= $n)
{
// Выводим случайную цифру от 0 до 9, шрифтом $font, на картинку img,
// с случайным размером от $minfontsize до $maxfontsize,
// с случайным поворотом от $minfontrate до $maxfontrate,
// с координатами $x+23 и $y+rand(0,10) и случайным цветом
imagettftext(
$img, // Наша картинка
rand($minfontsize,$maxfontsize), // Размер шрифта в пикселях
rand($minfontrate,$maxfontrate), // Угол поворота цифры
$x=$x+23, $y+rand(0,10), // Координаты в которых выводим цифры
imagecolorallocate($img, rand(0,128), rand(0,128), rand(0,128)), // Цвет шрифта
$font, // Имя файла со шрифтом
$rnd=rand(0,9)); // Случайная цифра от 0 до 9 которую мы выведем в капчу
// Сохраняем по очереди все выведенные цифры,
// в этой переменной будет храниться наш результат
$res = $res.(string)$rnd;
}

// Выводим наш результат
imagejpeg($img,,100);
// Освобождаем память
imagedestroy($img);
?>

Все предельно просто. Этим скрипом и создается наша капча, теперь нужно вывести её в том месте, где это необходимо, тегом img.

<img src="captcha.php" />

Нам осталось только передать данные из скрипта генерации капчи в основной скрипт, чтобы сравнить результаты. Это можно сделать любым удобным для вас способом, к примеру через сессии или базу.

Результат работы этого скрипта вы можете увидеть внизу, в разделе комментарии.

Читайте: Заработок в интернете. Возможно ли это?

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

Но если достаточное количество читателей попросят развить эту тему, то я с радостью напишу ещё одну статью, в которой мы займемся усложнением нашей капчи. Ну а пока все. До скорых встреч и всем счастливых предновогодних деньков.

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*

Если вы хотите получать уведомления на свой E-mail о появлении новых статей, то рекомендуем вам чуть ниже ввести свой электронный почтовый адрес.