2012-04-18 3 views
2

reCaptcha теперь трудно читать (расшифровать на самом деле). Поэтому я ищу альтернативную систему captcha для использования.Простая математическая карта captcha

Я подумываю использовать простую систему на основе математики, например: «What is 2+5».

Есть ли такие плагины или идеи о том, как создавать свои собственные?

(не сложная математика like this one)

ответ

0

Как насчет использования Captchator?

Его легко реализовать, и он просто работает! Также есть примеры кода для PHP и Ruby, их не должно быть сложно реализовать на других языках.

основой Math CAPTCHAs является слабым и легко пройти, есть много спамботов там, которые знают, как сделать математику :)

0

Если бы я сделать простой, то он пойти бы по линии:

Сделайте разные предметы категорий, таких как цветы, фрукты, овощи и мясо. Затем спроектируйте капчу, чтобы задать общую категорию.

Например:

Randomize категории, выбрать 2 уникальных. Поэтому, возможно, у нас есть цветы и фрукты. Далее спросите пользователя: «Если у вас есть 3 розы, 4 апельсина и 6 яблок, то сколько фруктов у вас есть?»

Простой шаблон:

Получить п-1 уникальных категорий. Показывать n элементов, где каждый элемент принадлежит к одной из уникальных категорий. Задайте количество из одной категории.

0

Вы можете создать такую ​​капчу самостоятельно. Все, что вам нужно сделать, это создать функцию, которая будет выбирать случайное число между указанным списком чисел и дважды вызвать функцию, чтобы выбрать два случайных числа.

Сохраните результат в переменной сеанса или любой другой переменной, чтобы вы могли ее проверить позже.

ниже приводится пример закодирован в C#

Random a=new Random(); 
    a.Next();//it will return you a non negative number 
    a.Next(min value,maximum value);//it will return you a number between the range specified. 

Надеется, что это помогает

2

PHP - генерирует простой математический вопрос сложения или вычитания, случайным образом чередующийся между отображением чисел (10 - 3) и слов (семь плюс пять) и принимает ответы численно (14) или как слова (четырнадцать).Возвращает массив, представляющий компоненты уравнения

[0] - первое значение переменной, как строка, как либо «4», либо «четыре» [1] - второе значение, оператор, например «+» или « плюс « [2] - третье значение, вторая переменная, например,« десять »или« 10 » [3] - ответ в цифровой форме, например« 14 » [4] - ответ в текстовой форме, например, «четырнадцать»

Итак, просто напечатайте уравнение на странице, сохраните массив в $ _SESSION, а затем проверьте ответ, который предоставляет пользователь.

<?php 

// array of numbers and their corresponding word versions 
// you can simply do $wordNumbers[6] and get 'six' 
$wordNumbers = array(
    0 => 'zero', 
    1 => 'one', 
    2 => 'two', 
    3 => 'three', 
    4 => 'four', 
    5 => 'five', 
    6 => 'six', 
    7 => 'seven', 
    8 => 'eight', 
    9 => 'nine', 
    10 => 'ten', 
    11 => 'eleven', 
    12 => 'twelve', 
    13 => 'thirteen', 
    14 => 'fourteen', 
    15 => 'fifteen', 
    16 => 'sixteen', 
    17 => 'seventeen', 
    18 => 'eighteen', 
    19 => 'nineteen', 
    20 => 'twenty' 
); 

/* 
* 
* returns an array representing components of a math captcha 
* [0] - first variable value, as string, like either '4' or 'four' 
* [1] - second value, the operator, like '+' or 'plus' 
* [2] - third value, the second variable, like 'ten' or '10' 
* [3] - the answer, in numerical form, like '14' 
* [4] - the answer, in text form, like 'fourteen' 
*/ 
function getMathCaptcha(){ 

    global $wordNumbers; 

    $equation = array(); 

    // get first number, between 7 and 13 inclusive 
    $n1 = rand(7, 13); 
    $r = rand(0,1); 
    // return $n1 as digit or text 
    if ($r == 0) { 
     $equation[0] = $n1; 
    } else { 
     $equation[0] = $wordNumbers[$n1]; 
    } 

    // get operator 
    $o = rand(0,1); 
    $r = rand(0,1); 
    if ($o == 0){ 
     // subtraction 
     if ($r == 0) { 
      $equation[1] = '-'; 
     } else { 
      $equation[1] = 'minus'; 
     } 
    } else { 
     // addition 
     if ($r == 0) { 
      $equation[1] = '+'; 
     } else { 
      $equation[1] = 'plus'; 
     } 
    } 

    // get second number, between 0 and 7 inclusive, so no negative answers 
    $n2 = rand(1,7); 
    $r = rand(0,1); 
    // return $n2 as digit or text 
    if ($r == 0) { 
     $equation[2] = $n2; 
    } else { 
     $equation[2] = $wordNumbers[$n2]; 
    } 

    // get answer 
    if ($o == 0){ 
     $answer = $n1 - $n2; 
    } else { 
     $answer = $n1 + $n2; 
    } 

    // answer as digit and text 
    $equation[3] = $answer; 
    $equation[4] = $wordNumbers[$answer]; 


    return $equation; 

} 


?> 
+0

Судя по тегу ASP.NET, вы не работаете на PHP, но логика довольно очевидна и должна быть проста в переносе на любой язык, который вам нравится. – siliconrockstar

Смежные вопросы