Библиотека программиста

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

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

В общем, может пригодиться. PHP код следующий:
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 такое изображение вызывается стандартно:
Код
<img src="sec_pic.php" alt="защитный код">


Скачать скрипт генерации защитного кода с полным набором символов и возможностью подключения своих шрифтов можно здесь [url=/uploads/files/public/secpic.rar]secpic.zip[/url]
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=374