2012-04-12 5 views
1

問題のコードは、MathGuardから来ています。これはPHPのスパム対策CAPTCHAスクリプトで、ユーザーは簡単な数学の問題に答える必要があります。数字と演算子のシンボルを3x5のランダムな文字列として表示します。私は、コードがどのように動作し、コードに従って、それが何をしているのかを理解できるという意味で理解しています。私はちょうどこのソリューションにどのようになるのか理解していません。このコードはどのようにして適切な文字列を生成しますか?

$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 
); 

私の質問は次のとおりです。ここで

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; 
} 

は桁の記述子である:

この関数は、3×5行列の1行を記述し、ランダムな文字の行に変換整数を受け取り:どのようにこの結論と生成方法に来ると、例えば、7は、ランダムな文字のフルラインを生成し、5は最も外側の文字だけを知っていますか?

これは単なるコードの難読化の形式ですか?この方法を文字列(たとえば111101101101111として0)として格納し、それぞれ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 
関連する問題