Простенькая капча
Как то для одного простенького проекта мне понадобилась капча, готовые решения типа KCAPTCHA использовать не захотелось, а по тому слегка полистав мануалы я написал ( половину слизал ) свою капчу.
«Для тех кто не в курсе:
Captcha — простейшая система проверки «компьютер или человек». Используется этот тест для защиты от спама или авторегистрации на сайте.»
Капчу я решил написать на PHP, и готовый вариант будет выглядеть примерно так
Создаем captcha.php, обратите внимание на кодировку желательно использовать «UTF-8 без BOM» иначе может не работать.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php session_start(); session_register('code'); $height = 20;//Высота картинки $width = 100;//Ширина картинки /*Генерируем случайное число, для кода*/ $_SESSION['code'] = rand(10000, 99999);//генерируем 5-ти значное число for($i = 0; $i < 5; $i++) { $m[$i] = substr($_SESSION['code'], $i, 1); } $image = imagecreate($width, $height); //Создаем изображение 100x20 $backgroundColor = imagecolorallocate($image, 204, 216, 6); //Задаем цвет для фона $noiseColor = imagecolorallocate($image, 100, 120, 180);//Задаем цвет помех $color = imagecolorallocate($image, 0, 0, 0);//Задаем цвет для чисел for( $i = 0; $i < ($width*$height)/3; $i++ ) { imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noiseColor); } /* Рисуем линии*/ for( $i = 0; $i < ($width * $height)/150; $i++ ) { imageline($image, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $noiseColor); } for($i = 0; $i < 5;$i++) { imagestring($image, 3, $y += 15, 3, $m[$i], $color); } header('Content-Type: image/jpeg'); imagejpeg($image); ?> |
Этим файлом мы создаем само изображение, тут же задаем для него такие параметры как цвет шрифта, фона и полосок.
Далее в нужной вам форме нужно вставить следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // В самом начале документа начинаем сессию. <?php session_start(); ?> // В нужном для вас месте создаем форму или используем уже существующею. <img src="captcha.php"> <form method="post"> Введите число: <input type="text" name="getСode"> <input name="sub" type="submit" value="Ввод"> </form> <?php if($_POST['sub']) { if($_POST['getСode'] == $_SESSION['code']) { echo "Число введено верно"; } else { echo "Число введено неверно"; } } ?> |
Собственно на этом все, ничего сложного.
Очень удобно, спасибо. А то своя мне надоела.
[Ответить]
Классно, спасибо. Вот только почему-то сгенерированный рисунок не отображается, что может мешать?
[Ответить]
ZekMan Reply:
Январь 11th, 2014 at 07:44
Посмотрите логи на наличие ошибок. Вариантов почему не отображается довольно много
[Ответить]