Наверняка при регистрации на каком-нибудь сайте, например на сайте доски объявлений, вы сталкивались с тем, что вас просили ввести цифровой или буквенный код, указанный на картинке. Написанием подобного скрипта мы и займемся.
Вообще эта функция в среде разработчиков и оптимизаторов называется CAPTCHA - это аббревиатура от английских слов <Completely Automatic Public Turing Test to Tell Computers and Humans Apart> - полностью автоматический тест Тьюринга для различения компьютеров и людей.
Для работы с графическими изображениями на сервере должна быть установлена библиотека GD. О ее наличии можно узнать у администратора или через утилиту phpinfo.
Для начала мы создадим форму, в которую поместим поле для ввода чисел, которое пользователь увидел на картинке, а также само изображение, сгенерированное скриптом.
<?
// здесь выше какая-то форма, которую пользователь должен заполнить
echo "Код на картинке:";
echo "<img src=code.php>";
// файл code.php - это и есть скрипт, который генерирует случайную картинку. Его текст будет приведен далее. <img src=:> - стандартный html-тэг вывода изображения.
echo "<input type=text name=number size=20";
// это поле для ввода значения на картинке.
// далее продолжение формы.
?>
Теперь в этом же файле делаем проверку на соответствие введенного кода коду, изображенному на картинке. Вставляем такую строку:
if ($_COOKIE['reg_num'] != $number) {echo "Не верный цифровой код!";}
// если введен неверное сочетание цифр, то пользователь увидит надпись: Неверный цифровой код!
Соответственно, чтобы продолжить выполнение скрипта или просто выдать надпись, что код верен, если он действительно соответствует коду на картинке, то нужно написать такую строку:
if ($_COOKIE['reg_num'] == $number) {echo "Спасибо! Код верен!";}
// пользователь увидит надпись: Спасибо! Код верен!
Ну и теперь сам файл, генерирующий код на картинке. В нашем случае он имеет имя code.php.
<?
header("Content-type: image/png");
// указываем на то, что мы используем графический файл png.
srand((double)microtime()*1000000);
// включаем генератор случайный чисел.
$num = rand('111111','999999');
// присваивам переменной $num случайное значение в диапозоне от 111111 до 999999.
setcookie('reg_num', $num);
// сохраняем результат в cookie.
$img = imagecreate('50','15');
$back = imagecolorallocate($img, 218, 218 ,218);
$black = imagecolorallocate($img, 0, 0, 0);
imageline($img, 0, 0, 49, 0, $black);
imageline($img, 0, 0, 0, 14 , $black);
imageline($img, 0, 14, 49, 14 , $black);
imageline($img, 49, 0, 49, 14 , $black);
imagestring($img,3,5,0,$num,$black);
// создаем прямоугольную картинку размером 50x15 с черными рамочками и вписанным в нее черным текстом - шестизначным числовым кодом.
imagepng($img);
// выводим созданное изображение на экран.
?>
Вот и все. Совсем не трудно. Однако следует заметить, что в последнее время в связи с распространением программ автоматической регистрации и усовершенствованием технологии распознавания символов, такой простой код может быть распознан такими программами. Поэтому его можно усложнить, добавив разные полосы, черточки, штрихи и т.д., как это сделано на ряде сайтов. Только не переусердствуйте. Подумайте не только о роботах, но и о пользователях, которые наверняка вспомнят создателя сайта не добрым словом, когда после очередной неудачной попытки распознать текст на картинке, он покинет ваш сайт, так и не добившись того, чего хотел. Знайте во всем меру.
Удачи в программировании!
©Невежин Евгений
http://nevius.ru
30.05.2007
При перепечатке информации ссылка на сайт http://nevius.ru обязательна.
© Copyright 2004-2025, nevius.ru