Часто в проектах требуется прикрепить капчу на различные формы. Предлагаю свой простой класс для работы с капчей, который позволяет сгенерировать проверочное изображение по заданным вами параметрам, а так же произвести проверку введенных данных.
Capcha Class:
class Captcha
{
private
$length = 5,
$width = 200,
$height = 36,
$letters = "0123456789",
$fontsize = 20,
$font = "ПутьДоШрифта",
$noise = true;
public function __construct($params = null)
{
if(is_array($params))
foreach($params as $key=>$value)
if(isset($this->$key)) $this->key = $value;
}
private function RandWord()
{
$word = "";
for($i = 0; $i < $this->length; $i++)
$word .= $this->letters[rand(0, strlen($this->letters) - 1)];
return $word;
}
public function Get()
{
header('Content-type: image/png');
$word = $this->RandWord();
$image = imagecreatetruecolor($this->width, $this->height);
imagesavealpha($image, true);
$background = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $background);
if($this->noise) $this->AddNoise($image);
for($i = 0; $i < $this->length; $i++)
{
$x = ($this->width - 20) / $this->length * $i + 10; $x = rand($x, $x + 4);
$y = $this->height - (($this->height - $this->fontsize) / 2);
$color = imagecolorallocate($image, rand(0, 130), rand(0, 130), rand(0, 130));
$angle = rand(-25, 25);
imagettftext($image, $this->fontsize, $angle, $x, $y, $color, $this->font, $word[$i]);
}
$_SESSION['captcha'] = $word;
imagepng($image);
imagedestroy($image);
}
private function AddNoise($image)
{
for($i=0; $i<1000; $i++) {
$color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imagesetpixel($image, rand(0, $this->width), rand(0, $this->height), $color);
}
for($i = 0; $i < rand(2, 5); $i++)
{
$color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imageline($image, 0, rand(0, $this->height), $this->width, rand(0, $this->height), $color);
}
}
public static function Verify($captcha)
{
if(!isset($_SESSION['captcha'])) return false;
return (strtolower($captcha) == strtolower($_SESSION['captcha']));
}
}
Вы можете указать свои параметры длины проверочного слова, ширины и высоты изображения, список символов, используемых для генерации, размер шрифта, путь до шрифта и наличие шума на изображении. Все эти параметры можно передать в конструкторе при создании экземпляра класса.
Пример использования:
Пример использования:
# Создаем экземпляр класса, можно указать свои параметры
$captcha = new Captcha(["font"=>"FONT.ttf", "width"=>150, "height"=>40]);
# В нужном месте вашего скрипта выводим само изображение
# Капча храниться в массиве $_SESSION
$captcha->Get();
# Статическим методом Verify можем проверить правильность введеных данных
Captcha::Verify("Введенные пользователем символы");
Удачи