简单但令人费解的问题:
假设我有一个字符串“516e965a8fe4b”。我希望它成为一个数字 0-100。由于有超过 100 种具有这样的字母数字哈希的可能性,因此重叠很好。
我该如何实施呢?
我很想知道你为什么想要这个。无论如何,这就是我会做的。
然后制作一个 MOD 101 的号码。(模数)
ID = 总和 % 101
使用这样的东西。添加数字的十六进制值并将其修改为 100:
function findNumber($hash) {
$sum=0;
for($i=0;$i<length($hash);$i++) {
$sum+=hexdec($hash[$i]);
}
return $sum%100;
}
function getNumber($string){
$value = 0;
for ($i=0; $i < strlen($string); $i++)
$value += hexdec($string[$i]);
$value = (int)($value/((strlen($string)+.001)*15/100));
return $value;
}
好吧,我有一种替代方法,它甚至比其他方法更安全,因为结果不能直接由输入确定。
function getNumber($hex, $min, $max){
srand(hexdec($num));
return rand($min, $max);
}
您将有一个介于 $min 和 $max 之间的数字(在您的情况下分别为 0 和 100),每次使用相同的输入运行此函数时,它总是相同的(即使它使用随机函数也是确定性的!)