Генерация арифметической капчи

В предыдущем рецепты уже был рассмотрен пример генерации капчи. Но прошлый раз выводились просто символы. Эту капчу можно немного модернизировать, реализовать ее в виде арифметического примера - например, вычисление суммы.
Пример:
// шрифт
$font = 'impact.ttf';
// Размер шрифта 
$fontsize = 20;
// Размер капчи 
$width = 120;
$height = 40;
// придумываем пример для капчи 
$a = mt rand(1, 19);
$b = mt rand(1, 19);
$capchaText = $a.'+'.$b.'=';
// Ответ на пример 
$capchaResult = $a + $b;
// создаем изображение
$img = imagecreatetruecolor($width, $height);
// фон
$white = imagecolorallocate($img, 220, 220, 220); 
imagefill($img, 0,0, $white);
// Заполняем изображение символами
for ($i = 0; $i < strlen($capchaText); $i++){
// Из списка символов, берем случайный символ 
$litteral = $capchaText[$i];
// Вычисляем положение одного символа
$x = ($width - 20) / strlen($capchaText) * $i +10;
$y = $height - (($height - $fontsize) / 2);
// Сгенерируем случайный цвет для символа.
$color = imagecolorallocate(
$img, rand(0, 150), rand(0, 150), rand(0, 150));
// Генерируем угол наклона символа 
$naklon = rand(-10,	10);
// Рисуем один символ 
imagettftext($img, $fontsize, $naklon, $x, $y,$color, $font, $litteral);
}
// Добавим на капчу несколько рандомных полосок 
for ($i = 0; $i < $countLine; $i++){
// сгенерируем координаты для линии
$part = $width/100; 
// длина картинки в процентах
// x1 не больше чем до 30% картинки
$x1 = mt rand(0, round($part*30));
$y1 = mt rand(0, $height);
// x2 не меньше чем от 70% картики
$x2 = mt rand(round($part*70),round($part*100));
$y2 = mt rand(0, $height);
// сгенерируем случайный цвет для линии 
$color = imagecolorallocate(
$img, rand(0, 150), rand(0, 150), rand(0, 150));
imageline ($img, $x1, $y1, $x2, $y2, $color);
}
// заголовок для браузера
header('Content-type: image/png');
// вывод капчи на страницу 
imagepng($ img);
// чистим память 
imagedestroy($img);

Теги:
капча
Добавлено: 28 Марта 2018 12:51:05 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...