2012-04-12 118 views
1

問題代碼來自MathGuard,這是一款PHP反垃圾郵件CAPTCHA腳本,需要用戶回答一個簡單的數學問題。它將數字和運算符顯示爲隨機字符的3x5矩陣。我理解代碼是如何工作的,我可以遵循代碼並理解它在做什麼;我只是不明白如何來解決這個問題。這段代碼如何生成正確的字符序列?

這個函數有描述3x5的矩陣的一行,並將其轉換成一條線的隨機字符的整數:

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只有最外面的字符?

這只是一種代碼混淆的形式嗎?是什麼讓這種方法比將數字存儲爲字符串更好(例如,1111011011011110),並用隨機字符替換每個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