有问题的代码来自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
)并用随机字符替换每个{{1}}更好?
答案 0 :(得分: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