Простенькая капча

Декабрь 13th, 2009 Рубрики: PHP coubertin.cz www.colvillewoodworking.com

Как то для одного простенького проекта мне понадобилась капча, готовые решения типа 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 &lt; 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 &lt; ($width*$height)/3; $i++ )
{
  imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noiseColor);
}
/* Рисуем линии*/
for( $i = 0; $i &lt; ($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 &lt; 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 "Число введено неверно";
    }
}
?>

Собственно на этом все, ничего сложного.

Теги:

3 комментария к “Простенькая капча”

  1. Октябрь 3rd, 2011 at 20:44
    1

    Очень удобно, спасибо. А то своя мне надоела.

    [Ответить]

  2. Abram
    Декабрь 17th, 2013 at 14:30
    2

    Классно, спасибо. Вот только почему-то сгенерированный рисунок не отображается, что может мешать?

    [Ответить]

    ZekMan Reply:

    Посмотрите логи на наличие ошибок. Вариантов почему не отображается довольно много

    [Ответить]

Написать комментарий