Генерация арифметической капчи
Капча реализация ее в виде арифметического примера – например, вычисление суммы.
// шрифт $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);