1

問題のコードは、ユーザーが簡単な数学の問題に答える必要があるPHPスパム対策CAPTCHAスクリプトであるMathGuardからのものです。数字と演算子記号をランダムな文字の3x5行列として表示します。私は、コードをたどり、コードが何をしているのかを理解できるという意味で、コードがどのように機能するかを理解しています。どうやってこの解決策にたどり着くのか、私にはわかりません。

この関数は、3x5行列の1行を表す整数を取り、それをランダムな文字の行に変換します。

function decToBin($dec) {
    $pattern = "123456789ABCDEFGHIJKLMNOPQRTSTUWXYZ";
    $output = "   ";
    $i = 0;
    do {
        if ($dec % 2) {
            $rand = rand() % 34;
            $output { 2 - $i } = $pattern { $rand };
        } else {
            $output { 2 - $i } = " ";
        }
        $dec = (int) ($dec / 2);
        $i++;
    } while ($dec > 0);
    $output = str_replace(" ", " ", $output);
    return $output;
}

数字記述子は次のとおりです。

$number = array (
    array ( 7, 5, 5, 5, 7 ), // 0
    array ( 2, 6, 2, 2, 7 ), // 1
    array ( 7, 1, 7, 4, 7 ), // 2
    array ( 7, 1, 7, 1, 7 ), // 3
    array ( 4, 5, 7, 1, 1 ), // 4
    array ( 7, 4, 7, 1, 7 ), // 5
    array ( 7, 4, 7, 5, 7 ), // 6
    array ( 7, 1, 1, 1, 1 ), // 7
    array ( 7, 5, 7, 5, 7 ), // 8
    array ( 7, 5, 7, 1, 7 )  // 9
);

私の質問は、どのようにしてこの結論と生成方法に到達し、たとえば、7ランダムな文字の完全な行を生成し5、最も外側の文字のみを生成することを知っているのですか?

これは単なるコード難読化の形式ですか?この方法が、たとえば、数字を文字列111101101101111として(0たとえば)格納し、それぞれ1をランダムな文字に置き換えるよりも優れている理由は何ですか?

4

1 に答える 1

0

私には単純なビットマップのように見えます。

7 = 1 1 1
5 = 1 0 1
5 = 1 0 1
5 = 1 0 1
7 = 1 1 1

2 = 0 1 0
6 = 1 1 0
2 = 0 1 0
2 = 0 1 0
7 = 1 1 1
于 2012-04-12T06:34:01.127 に答える