Генерация изображения со случайным кодом (captcha)

Источник: easywebscripts

Чаще всего изображения со случайным кодом (так называемая captcha) используются для защиты от флуда (автоматизированного ввода сообщений), некоторые сервисы находят им применнение в качестве раздражителя (для перехода на платный вариант). В общем, может пригодиться. PHP код следующий:

01$width = 100;               //Ширина изображения
02$height = 60;               //Высота изображения
03$font_size = 16;            //Размер шрифта
04$let_amount = 4;            //Количество символов, которые нужно набрать
05$fon_let_amount = 30;       //Количество символов на фоне
06$font "fonts/cour.ttf";   //Путь к шрифту
07 
08//набор символов
09$letters array("a","b","c","d","e","f","g");     
10//цвета
11$colors array("90","110","130","150","170","190","210"); 
12 
13$src = imagecreatetruecolor($width,$height);    //создаем изображение              
14$fon = imagecolorallocate($src,255,255,255);    //создаем фон
15imagefill($src,0,0,$fon);                       //заливаем изображение фоном
16 
17for($i=0;$i $fon_let_amount;$i++)          //добавляем на фон буковки
18{
19//случайный цвет
20$color = imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100);
21//случайный символ
22$letter $letters[rand(0,sizeof($letters)-1)];
23//случайный размер                             
24$size = rand($font_size-2,$font_size+2);                                           
25imagettftext($src,$size,rand(0,45),
26rand($width*0.1,$width-$width*0.1),
27rand($height*0.2,$height),$color,$font,$letter);
28}
29 
30for($i=0;$i $let_amount;$i++)      //то же самое для основных букв
31{
32$color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],
33$colors[rand(0,sizeof($colors)-1)],
34$colors[rand(0,sizeof($colors)-1)],rand(20,40));
35$letter $letters[rand(0,sizeof($letters)-1)];
36$size = rand($font_size*2-2,$font_size*2+2);
37$x = ($i+1)*$font_size + rand(1,5);      //даем каждому символу случайное смещение
38$y = (($height*2)/3) + rand(0,5);                           
39$cod[] = $letter;                        //запоминаем код
40imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
41}
42 
43$cod = implode("",$cod);                    //переводим код в строку
44 
45header ("Content-type: image/gif");         //выводим готовую картинку
46imagegif($src);
Это максимально упрощенный вариант с использованием только одного шрифта и небольшого количества символов и цветов, хотя и этого бывает достаточно, чтобы оградиться от незатейливых спамеров и флудеров.

Через HTML такое изображение вызывается стандартно:

1<img src="sec_pic.php" alt="защитный код">

Скачать скрипт генерации защитного кода с полным набором символов и возможностью подключения своих шрифтов можно здесь secpic.zip

Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=29561