Наткнулся на просторах интернетов на любопытную реализацию технологии captcha – пользователю предлагается решить линейное уравнение с одним корнем и ввести решение в качестве проверочного кода.
Я, когда себе на блог искал капчу, много разных перепробовал, но с таким любопытным подходом не сталкивался. Решил посмотреть на неё поближе, открыл код страницы и разочаровался – задание для капчи выводится текстом, а не картинкой.
В общем из любопытства решил её поломать 🙂
В общем случае данная captcha представляет собой линейное алгебраическое уравнение (ax + b = 0). Для решения воспользовался бесплатной системой компьютерной алгебры Maxima. (Эх, почему же я не знал о ней на 1-3 курсах института?! Она даже на КПК способна работать!).
Строка с задчей для капчи получается из html-кода страницы примерно в таком виде:
(x+9)∙5+4=64
.
От тегов можно избавиться на этапе получения нужной строки, но большого вреда от них нет, так что для наглядности оставил.
Дальше строка немного обрабатывается для приведения к виду, пригодному для решения в Maxima, затем следует собственно решение и далее – обработка вывода для вычленений из него нужного проверочного кода (вывод у Maxima достаточно подробный, даже если применить опцию --quiet
):
#!/usr/bin/perl
use warnings;
use strict;
use encoding 'utf8';
my $input = '(x+9)∙5+4=64';
$input =~ s|?[b,i]>||ig;
$input =~ s/∙/*/ig;
$input =~ s/−/-/ig;
print $input,"\n";
my $out = qx/maxima --quiet --batch-string=solve"($input);"/;
my $x = $1 if $out =~ m#\[x = (-?\s?\d+)\]#gi;
print $x,"\n";
exit 0;
Вот так мне повезло за один вечер познакомиться с интересной идеей для механизма captcha и узнать о прекрасной системе компьютерной алгебры Maxima.
Желаю и вам побольше новых приятных открытий!
P.S. И кстати, возвращаясь к теме заработка в интернете – чтобы попробовать зарабатывать в сети, совсем не обязательно искать хостинг и делать блог с нуля. Можно купить готовый сайт, зачастую достаточно недорого, и не тратить время и силы на освоение сайтостроения!