如何将十六进制id转换为0-100之间的数字?

时间:2013-04-17 11:42:10

标签: php math hash

简单但令人费解的问题:

说我有一个字符串“516e965a8fe4b”。我希望它成为0-100的数字。因为有这样的字母数字哈希的可能性远远超过100种,所以重叠很好。

我该如何实施?

4 个答案:

答案 0 :(得分:4)

我很想知道你为什么要这样。不管怎样,我就是这样做的。

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

    ID = Sum%101

答案 1 :(得分:1)

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

function findNumber($hash) {

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

}

答案 2 :(得分: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;
}

答案 3 :(得分:1)

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

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

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