- PVSM.RU - https://www.pvsm.ru -
Однажды в далеком 2009 году я делал сайт для музыкантов. Единственным средством обратной связи на сайте была гостевая книга. Чтобы не пустить ботов, спамеров и нехороших людей, нужна была капча. Так как сайт для музыкантов, то я подумал, пусть капча тоже будет музыкальной.
То, что получилось, выглядит примерно так:
или так:
Ноты нужно распознать и выбрать соответствующие в четырех (по количеству нот) выпадающих списках:
От знаков альтерации [1] пришлось отказаться, т. к. это было бы слишком сложно как для меня (на тот момент не мог придумать, как это сделать), так и для пользователей, потому что процесс ввода усложнился бы в разы.
На сервере генерируется картинка из (псевдо)случайно выбранных четырех картинок нот и пауз. Имена картинок — цифры от 0 до 13 + расширение (png) — соответствуют номеру позиции ноты на нотном стане, начиная от нижней добавочной. Ключ тоже случайный — басовый или скрипичный. Чтобы понять, что нота означает в текущем ключе, был сделан такой конвертер:
<?php
function scrip_href($x){
switch( $x )
{
case 0: $x1=0; break;
case 1: $x1=1; break;
case 2: $x1=2; break;
case 3: $x1=3; break;
case 4: $x1=4; break;
case 5: $x1=5; break;
case 6: $x1=6; break;
case 7: $x1=7; break;
case 8: $x1=1; break;
case 9: $x1=2; break;
case 10: $x1=3; break;
case 11: $x1=4; break;
case 12: $x1=5; break;
case 13: $x1=6; break;
}
return $x1;
}
function bass_href($x){
switch( $x )
{
case 0: $x1 = 0; break;
case 1: $x1 = 3; break;
case 2: $x1 = 4; break;
case 3: $x1 = 5; break;
case 4: $x1 = 6; break;
case 5: $x1 = 7; break;
case 6: $x1 = 1; break;
case 7: $x1 = 2; break;
case 8: $x1 = 3; break;
case 9: $x1 = 4; break;
case 10: $x1 = 5; break;
case 11: $x1 = 6; break;
case 12: $x1 = 7; break;
case 13: $x1 = 1; break;
}
return $x1;
}
?>
Дальше все просто — генерируем ключ и ноты:
<?php
mt_srand( time() + (double)microtime()*55 );
$n = mt_rand(1, 2);
$n1 = mt_rand(0, 13);
$n2 = mt_rand(0, 13);
$n3 = mt_rand(0, 13);
$n4 = mt_rand(0, 13);
?>
Конвертируем то что получилось в что-то понятное:
<?php
if( $n == 1 ){
$x1 = scrip_href($n1);
$x2 = scrip_href($n2);
$x3 = scrip_href($n3);
$x4 = scrip_href($n4);
}
elseif( $n == 2 ){
$x1 = bass_href($n1);
$x2 = bass_href($n2);
$x3 = bass_href($n3);
$x4 = bass_href($n4);
}
?>
Затем остается только записать получившийся код в сессию, склеить и отдать картинку.
Таким образом, в сессии у нас записаны реальные номера нот (пауза=0, до=1, ре=2, и т. д.), а пользователь видит забавную капчу.
Спасибо, что дочитали до конца.
Автор: c_basso
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/interfejsy/13776
Ссылки в тексте:
[1] знаков альтерации: http://ru.wikipedia.org/wiki/%D0%97%D0%BD%D0%B0%D0%BA%D0%B8_%D0%B0%D0%BB%D1%8C%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8
Нажмите здесь для печати.