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