2

reCaptchaが読みにくくなりました(実際には解読できます)。だから私は使用する代替のキャプチャシステムを探しています。

単純な数学ベースのシステムを使用することを考えています。例:" What is 2+5"。

そのようなプラグイン、または自分でプラグインを作成する方法についてのアイデアはありますか?

(このような複雑な数学ではありません)

4

5 に答える 5

2

PHP - 数字 (10 - 3) と単語 (7 + 5) の表示をランダムに交互に表示する単純な足し算または引き算の数学の問題を生成し、数値 (14) または単語 (14) として回答を受け入れます。方程式の成分を表す配列を返します

[0] - '4' または 'four' などの文字列としての最初の変数値 [1] - 2 番目の値、'+' または 'plus' などの演算子 [2] - 3 番目の値、2 番目の変数、など「10」または「10」 [3] - 「14」などの数値形式の回答 [4] - 「14」などのテキスト形式の回答

したがって、方程式をページに出力し、配列を $_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;

}


?>
于 2012-12-20T18:15:47.437 に答える
1

以下の私のようなキャプチャ方法を試しましたか?

このキャプチャ方法の欠点は何ですか

または、特にユーザー入力方法を使用したいですか?

于 2012-04-18T10:49:09.527 に答える
0

Captchatorを使用してみませんか?

実装は簡単で、うまくいきます!PHP と Ruby のコード サンプルもあり、他の言語での実装は難しくありません。

数学ベースのキャプチャは弱く、簡単に通過できます。数学のやり方を知っているスパムボットがたくさんいます :)

于 2012-04-18T09:38:13.010 に答える
0

簡単なものを作るとしたら、次のようになります。

花、果物、野菜、肉など、さまざまなカテゴリのアイテムを作成します。次に、カテゴリの合計を求めるキャプチャを設計します。

例えば:

カテゴリをランダム化し、2 つの固有のものを選択します。花と果物があったとします。次に、ユーザーに次のように尋ねます。「バラが 3 つ、オレンジが 4 つ、リンゴが 6 つある場合、果物はいくつありますか?」

簡単なパターン:

n-1 個の一意のカテゴリを取得します。n 個のアイテムを表示します。各アイテムは固有のカテゴリの 1 つに属します。1 つのカテゴリから合計を求めます。

于 2012-04-18T09:48:11.823 に答える
0

このようなキャプチャを自分で作成できます。あなたがしなければならないのは、与えられた数字のリストから乱数を選ぶ関数を作成し、その関数を 2 回呼び出して 2 つの乱数を選ぶことだけです。

結果をセッション変数またはその他の変数に保存して、後で確認できるようにします。

以下は、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.

お役に立てれば

于 2012-04-18T09:54:41.587 に答える