0

简单但令人费解的问题:

假设我有一个字符串“516e965a8fe4b”。我希望它成为一个数字 0-100。由于有超过 100 种具有这样的字母数字哈希的可能性,因此重叠很好。

我该如何实施呢?

4

4 回答 4

4

我很想知道你为什么想要这个。无论如何,这就是我会做的。

  • 添加每个数字或字母的 ASCII 值。
  • 然后制作一个 MOD 101 的号码。(模数

    ID = 总和 % 101

于 2013-04-17T11:44:18.707 回答
1

使用这样的东西。添加数字的十六进制值并将其修改为 100:

function findNumber($hash) {

    $sum=0;
    for($i=0;$i<length($hash);$i++) {
        $sum+=hexdec($hash[$i]);
    }
    return $sum%100;

}
于 2013-04-17T11:48:10.067 回答
1
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;
}
于 2013-04-17T12:01:20.727 回答
1

好吧,我有一种替代方法,它甚至比其他方法更安全,因为结果不能直接由输入确定。

function getNumber($hex, $min, $max){
    srand(hexdec($num));
    return rand($min, $max);
} 

您将有一个介于 $min 和 $max 之间的数字(在您的情况下分别为 0 和 100),每次使用相同的输入运行此函数时,它总是相同的(即使它使用随机函数也是确定性的!)

于 2013-04-17T12:14:47.243 回答