Генерация CAPTCHA на perl при помощи Authen::Captcha

генерация captcha на perl Я уже приводил алгоритм и готовый код для генерации проверочного изображения (СAPTCHA) для perl, реализуемой при помощи работы с библиотекой Image::Magick (предоставляет интерфейс между perl и самой imagemagick). Сейчас же хочу рассказать о работе с библиотекой Authen::Captcha, поскольку взаимодействие с ней проще, хотя теряется гибкость настроек генерируемого изображения. К слову, гибкость есть в библиотеке GD::SecurityImage, но у неё отстутствует простой механизм проверки результатов пользовательского ввода (этого недостатка должна быть лишена GD::SecurityImage::AC — "сплав" Authen::Captcha и GD::SecurityImage, которую я тоже обязательно попробую и расскажу о результатах).

Perl код для генерации изображения CAPTCHA

#!/usr/bin/perl
use Authen::Captcha;
use Digest::MD5 qw( md5_hex );
my $cap_data_folder = 'tmp/captcha'; # Здесь будет находиться текстовый файл с кодами CAPTCHA
my $cap_out_folder = 'tmp/outputcaptcha'; # Тут расположены проверочные изображения CAPTCHA
my $cap_length = 4; # Из скольки символов будет состоять капча
my $captcha = Authen::Captcha->new( data_folder => $cap_data_folder, output_folder => $cap_out_folder, );
my $md5sum = $captcha->generate_code($cap_length);

Этот код создаст набор символов, сгенерирует на его основе изображение и вернёт md5 хэш для него. Наша следующая задача — проверить введённый пользователем код на соотвтетствие сгенерированномую.

Perl код для проверки введённого значения CAPTCHA

Для проверки введённого пользователем значения captcha нужно вычислить его md5 хэш (именно для этого используется библиотека Digest::MD5).

my $md5sum = md5_hex($cap_input_value); # Вычсляем md5 хэш для пользовательского ввода
my $result = $captcha->check_code($cap_input_value,$md5sum); # Отдаём хэш на проверку

Результаты проверки приведены в документации на Authen::Captcha, я же продублирую их ниже:

  1 : Passed
  0 : Code not checked (file error)
-1 : Failed: code expired
-2 : Failed: invalid code (not in database)
-3 : Failed: invalid code (code does not match crypt)

Таким образом, достаточно просто сделать условия срабатывания, зависящие от результатов проверки. Легче лёгкого :)

Еще на похожие темы:

Leave a Reply