Создание CAPTCHA на PHP



CAPTCHA — это простой тест, чтобы определить, является ли пользователь человеком или компьютером. Используется этот тест для защиты от спама или авторегистрации на сайте. В своей статье я покажу, как можно сделать CAPTCHA на php. Готовая CAPTCHA будет выглядеть примерно так:

captcha

Создаем файл captcha.php.

<?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, 239, 8, 8);//Задаем цвет для чисел
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);
?>

Создадим файл check.php.

<?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 "Число введено неверно"; 
    } 
} 
?>


Теги: ,

Комментарии

  1. imagestring($image, 3, $y += 15, 3, $m[$i], $color);
    «$y» непонятно уткуда взялос+ капча не работает

    Reply

  2. Каптча работает правильно. $y задается в imagestring($image, 3, $y += 15, 3, $m[$i], $color), т. е. первоначальное значение $y = 15. Далее в цикле значение $y увеличивается на
    15.
    Это можно проверить так:
    < ?php for($i=0; $i<5; $i++) { echo " "; echo $y += 15; } ?>

    Reply

  3. Спасибо проверю данный код в действии

    Reply

  4. хм… при обновлении каптча бесполезна… тоесть вот я заполнил форму.. ввёд неправильно каптчу — выдало ошибку.. нажал назад ввел верно.. всё норм.. при обновлении той же формы каптча не показывает сообщение что каптча введена неверно..

    Reply

  5. Скрипт работает, все норм, но… Как можно увеличить размер цифр? (сорри я ток пару недель php изучаю)

    Reply

  6. Dimka
    Размер цифр, а точнее вид шрифта задается в этой строке:
    imagestring($image, 3, $y += 15, 3, $m[$i], $color);
    Чтобы сделать цифры больше, замените 3 на 5:
    imagestring($image, 5, $y += 15, 3, $m[$i], $color);

    Reply

  7. captcha ne rabotaet.

    Reply

    Max Reply:


    Что именно не работает? Какое сообщение об ошибке вы получаете?

    Reply

  8. Спасибо, очень помогло!!!)))

    Reply

  9. Работает капча! )

    Reply

  10. Дмитрий

    Deprecated: Function session_register() is deprecated in Z:\home\xxx\www\captcha.php on line 3

    Reply

    Max Reply:


    В поздних версиях PHP, эта функция считается устаревшей.

    Reply

Оставить комментарий