генерация изображения со случайным кодом (captcha)Чаще всего изображения со случайным кодом (так называемая captcha) используются для защиты от флуда (автоматизированного ввода сообщений), некоторые сервисы находят им применнение в качестве раздражителя (для перехода на платный вариант). В общем, может пригодиться. PHP код следующий:
$width = 100; //Ширина изображения
$height = 60; //Высота изображения
$font_size = 16; //Размер шрифта
$let_amount = 4; //Количество символов, которые нужно набрать
$fon_let_amount = 30; //Количество символов на фоне
$font = "fonts/cour.ttf"; //Путь к шрифту
//набор символов
$letters = array("a","b","c","d","e","f","g");
//цвета
$colors = array("90","110","130","150","170","190","210");
$src = imagecreatetruecolor($width,$height); //создаем изображение
$fon = imagecolorallocate($src,255,255,255); //создаем фон
imagefill($src,0,0,$fon); //заливаем изображение фоном
for($i=0;$i < $fon_let_amount;$i++) //добавляем на фон буковки
{
//случайный цвет
$color = imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100);
//случайный символ
$letter = $letters[rand(0,sizeof($letters)-1)];
//случайный размер
$size = rand($font_size-2,$font_size+2);
imagettftext($src,$size,rand(0,45),
rand($width*0.1,$width-$width*0.1),
rand($height*0.2,$height),$color,$font,$letter);
}
for($i=0;$i < $let_amount;$i++) //то же самое для основных букв
{
$color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],
$colors[rand(0,sizeof($colors)-1)],
$colors[rand(0,sizeof($colors)-1)],rand(20,40));
$letter = $letters[rand(0,sizeof($letters)-1)];
$size = rand($font_size*2-2,$font_size*2+2);
$x = ($i+1)*$font_size + rand(1,5); //даем каждому символу случайное смещение
$y = (($height*2)/3) + rand(0,5);
$cod[] = $letter; //запоминаем код
imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
}
$cod = implode("",$cod); //переводим код в строку
header ("Content-type: image/gif"); //выводим готовую картинку
imagegif($src);
Это максимально упрощенный вариант с использованием только одного шрифта и небольшого количества символов и цветов,
хотя и этого бывает достаточно, чтобы оградиться от незатейливых спамеров и флудеров.Через HTML такое изображение вызывается стандартно: Скачать скрипт генерации защитного кода с полным набором символов и возможностью подключения своих шрифтов можно здесь secpic.zip
Комментарии:Mastik 15.03.08 в 19:16 Картинка хорошая, спасибо. Alek Veritov 17.03.08 в 06:53 через переменную сессии. Winxp 13.07.08 в 14:08 Отличный скрипт,большое спасибо seryjvolk 31.08.08 00:41 в скрипте отличные буквы, мне оч понравился, а если еще и заработает у меня вообще отлично будет pati 09.10.08 01:08 Спасибо. СимпотишЫне картинки. Будем ща прикручивать к фидбэку. Спасиб автору :) Faust 22.10.08 19:48 Спасибо! Так лень было самому писать)) DRONNY 31.01.09 19:10 Вставляю следующий код на свою страницу: echo \'<img src=\"captcha.php\">\'; echo <<<HTML <form action=\"\" method=\"post\"> Secpic: <input type=\"text\" maxlength=\"4\" name=\"secpic\" /><br /> <input type=\"submit\" name=\"submit\" value=\"Отправь меня!\" /> </form> HTML; if ($_SESSION[\'secpic\'] == $_POST[\"secpic\"]) {echo \"Код введен правельно.\";} Ввожу код ПРАВЕЛЬНО, но надпись \"Код введен правельно.\" не появляется. Что делать ? drD0s 25.02.09 15:10 У меня тоже самое, что и у DRONNY! Объясните плиз! Alek Veritov 25.02.09 15:48 в captcha.php вместо $cod = implode(\"\",$cod); надо написать $_SESSION[\'secpic\'] = implode(\'\',$cod); выведите на экран $_SESSION[\'secpic\'] и $_POST[\"secpic\"], посмотрите что в них и будет вам счастье ... drD0s 25.02.09 17:18 Разобрался! В самое начало страницы нужно воткнуть начало сессии! <php? Session_start(); ?> <html> ... CaTacLYSM 03.03.09 11:34 Эмммм. А кто подскажет. На Denwer капча работает нормально, а вот на сервере (CentOS)Apache не рисуется! В чем проблема и как можно исправить?! Alek Veritov 03.03.09 23:31 to CaTacLYSM: проверяйте правильность установки GD библиотеки на сервере Smile42RU 19.07.09 17:41 Alek, молодец!) Кульный скрипт Сергей 08.08.09 13:30 У Вас очень простые и талантливые идеи, спасибо. Вашу captcha прикрутил на свой сайт. Динар 28.10.09 16:01 А есть небольшая проблема с Кешированием. У меня почему-то сессии не совпадают немного. И когда неправильно введен код, то шаблонизатор заново отображает функцию, например, регистрации, а там код тот же, что и до этого. И при этом дико несоответствуют сессии друг другу. Запаздывают примерно на одно обновление. Как это можно исправиль. Прошу прощения за сумбур. Alek Veritov 28.10.09 22:53 добавляй случайный GET параметр к ссылке, что-нибудь типа Andy 07.11.09 01:16 Здравствуйте ! Alek Veritov 07.11.09 01:41 Сессию, конечно, надо только один раз стартовать там, где это логично. Скрипт из архива можно использовать "как есть", поэтому там сессия стартуется. Макс 29.11.09 03:06 Не получается, прошу разобраться. Андрей 19.01.10 20:33 Картинки замечательные. К генератору никаких замечаний, всё работает, однако передачу значения кода с картинки через переменную сессии осуществить не удалось. Если можете, разъясните подробнее на рабочем примере "Форма+капча+обработчик формы и кода" Андрей 19.01.10 21:52 Таки заработало! Serega 17.04.10 15:34 Здравствуйте! Serega 17.04.10 15:35 А вот код, как я это делаю: Александр 12.06.10 07:28 У меня проблемка, скрипт иногда выводит на картинку одно, а в переменную сессии другое, в чём может быть дело? anonymous 07.07.10 15:25 День добрый! Set 31.08.10 09:45 Скрипт и капча просто супер. Что бы все заработало нужно в принимающем файле вписать следующее. Александр 08.10.10 19:45 Цитата: "У меня проблемка, скрипт иногда выводит на картинку одно, а в переменную сессии другое, в чём может быть дело?" Марьян 10.11.10 13:59 Здравствуйте. У меня возникла такая вот проблемка. На денвере все хорошо скрипт отрабатывается и картинка выводиться, а при переносе на хостинг скрипт перестает генерировать изображение. Подскажите плиз в чем это может быть проблема. Галина 11.12.10 14:53 У меня вообще выводится только альтернативный текст - подключиться к файлу никак не может Андрей 03.01.11 17:16 Подскажите как сделать поле куда вписывать код Беломор 06.02.11 21:22 Хорошая капча. Автору спасибо! Jasperio 31.03.11 00:26 Как обновить картинку с новым кодом капTча ? MS 08.04.11 23:20 Чтобы обновить изображение: ICEBERG 22.04.11 02:27 Аналогичная проблема с сессией. MS 24.04.11 11:33 в каптче сессия должна стартовать session_start(); Дмитрий 28.04.11 16:46 Как перегрузить средствами php или js исходный файл(secpic.php), чтобы тот файл к которому прикручена капча не перегружался. Попробовал функцию в сообщении от 08.04.11 - не работает. MS 30.04.11 16:03 не дописал 1 строку, чтобы работало нужно заменить в сообщении от 08.04 Дмитрий 06.05.11 14:57 Автору - опишите пожалуйста как Вы реализовали проверку на ввод защитного кода "Неправильный защитный код!". wcb-tezarius 14.05.11 14:33 Неплохо было бы автору обновить исходник и код вверху добавив к нему предоставленную возможность обнавления (очень полезная штука) но всеравно обоим авторам спс за скрипт Серей 16.05.11 05:32 Отличный скрипт, спасибо. Mihail Zimbru 04.06.11 22:28 Privet Alek, deistvitelno tvoi skript o4eni horoshii, genialnii i prostoi :). Spasibo bolishoe, ia nemnoshko ego dorobotal zdelav ego dinami4nee. Kak mne postaviti zdesi moiu dorobotku? Раиса 06.06.11 23:08 Картинка красивая, но выложите, кто-нить, пож., полностью работающую капчу с проверкой введенного кода и обновлением капчи. http://displanet.ru/ 29.06.11 12:59 Вот тоже пример хороший Кишин 05.07.11 14:12 Вообще неработает, непонятно, у меня фотрма работает вообще то даже если я вообще не введу код с картинки Alex 11.07.11 01:19 Не работает, на картинке и в переменной разные символы...:(( Zakhar 25.08.11 13:45 Символы на картинке и в переменной разные пока вы сеанс не перезапустите,т.к. в том же сеансе данные извлечь нельзя. Sanchezzz T 14.09.11 08:07 Спасибо то что нужно я немного переделал его TEZARIUS 18.10.11 10:27 Такой вопрос: Alek Veritov 19.10.11 10:03 Цвета букв задаются как RGB тремя числами от 0 до 255. Для фона они выбираются случайно в строке 20, для основных задаются варианты потемнее в строке 11. И то и другое, естественно, можно поменять. pan_fx 16.11.11 04:42 Спасибо хороший скрипт! Алексей 29.11.11 16:56 Спасибо! Целый день искал наконец нашел, установился без проблем Алексей 29.11.11 17:00 Можно еще и фон поменять, супер то что надо Саша 26.12.11 00:19 Обалденный скрипт :))) Спасибо большое автору, все просто и без гемороя!!! и главное работает :)) Kapust 26.12.11 15:12 Применил данный пример, очень доволен, спасибо. kapust 26.12.11 15:15 Блин криво скопировался текст, в последней строке функции надо добавить аппендТу: Black Diamond 26.01.12 00:20 Автор, большие благодарности за код! Работает идеально. Просто, стильно и со вкусом! Кликнул по рекламе :) От человека 27.02.12 16:50 Fatal error: Call to undefined function imagecreatetruecolor() in F:serverwwwtestcommentssecpic.php on line 14 От человека 27.02.12 16:59 ну так и было, GD2 не было подключено! Спасибо за скрипт! Виталий 03.03.12 21:12 в сессии находится предыдущие значение картинки,как быть? Константин 27.03.12 10:31 Прекрасный скрипт. Но при использовании все равно валила куча спама пока в сессии не начал передавать не сам код в открытом виде, а md5 хэш. Видимо спам боты могут считывать переменные из сессии. от меня 15.05.12 14:58 Скрипт супер, спасибо, единственный трабл, ввожу все правельно, а пишет Регистрация невозможна: код подтверждения введен не верно Mark 17.05.12 22:19 Вот тут по проще капча с исходниками и фоновым рисунком: Добрый дядя 19.05.12 14:32 Классные статьи на сайте! Через рекламу - спасибо:) Если вам помогла или просто понравилась эта статья вы можете отблагодарить автора кликнув по рекламе. Спасибо! комментировать:
прежде чем писать комментарий убедитесь, пожалуйста, что он не попадает в нижеследующие категории:
прямые оскорбления кого бы то ни было будут удалятся! от кого: |


