Создание формы с капчей

В этой статье я хочу рассказать, как создать капчу. Для своих сайтов, я раньше всегда использовал уже готовые решения. Но сейчас решил разобраться и рассказать, как устроена капча. На самом деле в ней нет ни чего сверхъестественного. Капча – это просто картинка, состоящая из фона и случайных символов. В исходнике есть комментарии, думаю, Вам все будет понятно. Весь исходник состоит их трех файлов, index.php – скрипт проверяющий корректность введенной капчи, capcha.php – скрипт генерирующий капчу иindex.html – форма для ввода капчи.

capcha.php

<?php 
//========= Задаем параметры капчи(при желании можно вынести в отдельный файл - config)
//Переменная, в которой храниться список символов. используемых в капче
$let = '0123456789';  
// количество символов в капче
$len = 4;
// шрифт символов на капче( шрифт лучше положить в папку со скриптом)
$font = 'impact.ttf'; 
// Размер шрифта 
$fontsize = 20; 
// Размер капчи
$width = 100; // - длина
$height = 30; // - высота
//==========

// Задаем заголовок для вывода картинки
header('Content-type: image/png');  
// Создаем изображение
$img = imagecreatetruecolor($width, $height);  
// фон для капчи
$white = imagecolorallocate($img, 220, 220, 220); 
imagefill($img, 0, 0, $white); 
// Переменная, для хранения значения капчи
$capchaText = ''; 

// ========= Заполням изображение символами
for ($i = 0; $i < $len; $i++){ 
	// Из списка символов, берем случайный символ 
	$capchaText .= $let[rand(0, strlen($let)-1)];  
	// Вычесляем положение одного символа
	$x = ($width - 20) / $len * $i + 10; 
	$y = $height - (($height - $fontsize) / 2); 	
	// Укажем случайный цвет для символа. 
	$color = imagecolorallocate($img, rand(0, 150), rand(0, 150), rand(0, 150) );  
	// Генерируем угол наклона символа 
	$naklon = rand(-30, 30);  
	// Рисуем символ
	imagettftext($img, $fontsize, $naklon, $x, $y, $color, $font, $capchaText[$i]); 
}
// ==========

// Запускаем сессию, и записывем в нее значение капчи. Это понадобится для проверки с тем, что вводит юзер
session_start(); 
$_SESSION['capcha'] = $capchaText; 
// вывод капчи на страницу
imagepng($img);  
// чистим память, корторую мы заняли при создании картинки
imagedestroy($img);
?>

index.php

<?php  
// старт сессии
session_start(); 
// Сравниваем введенную капчу с тем, что храниться в сессии
if($_SESSION['capcha'] == $_POST['capcha']){
	echo 'Капча верная';
}else {
	echo 'Капча не верная';
} 
// Удаляем значение капчи из сессии 
unset($_SESSION['capcha']);  
?>

И сама форма — index.html

<form method="post" action="index.php">
	<img src="capcha.php" width="100" height="30" /><br />
	Код с картинки: <input type="text" name="capcha" /><br />
	<input type="submit" value="Отправить" />
</form>
Рассказать друзьям:


Создание формы с капчей: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*