为md5哈希分配一个数字(1到9之间)

时间:2010-10-21 13:58:43

标签: php md5

拥有md5哈希,如:

md5("test") = "098f6bcd4621d373cade4e832627b4f6"

每次将md5哈希值传递给它时,如何编写一个函数来返回1到9之间的数字?该数字必须始终相同,即myfunc(“098f6bcd4621d373cade4e832627b4f6”)应始终返回相同的数字。 谢谢你的帮助。

6 个答案:

答案 0 :(得分:5)

这是过度杀伤,并且返回最左边数字的建议是最好的......

function myfunc($md5) {
    $total = 0;
    foreach (str_split($md5) as $char) $total += ord($char);
    return $total % 9 + 1;
}

echo myfunc("098f6bcd4621d373cade4e832627b4f6");

通过这种方式,您可以通过修改返回参数轻松更改您感兴趣的返回值范围。

或者,更紧凑的版本:

function myfunc2($md5) {
    return array_sum(array_map("ord", str_split($md5))) % 9 + 1;
}

你甚至可以将最小值和最大值传递给args:

function myfunc2($md5, $min = 1, $max = 9) {
    return array_sum(array_map("ord", str_split($md5))) % $max + $min;
}

myfunc2("098f6bcd4621d373cade4e832627b4f6", 10, 20);

答案 1 :(得分:4)

最简单的方法:在md5中找到第一个数字并返回它:)你可以使用简单的regexp来完成它。当然,如果没有找到数字,请记住要有一些安全的返回值(但它几乎不会发生)。

答案 2 :(得分:3)

一直返回1。符合规格!

更严重的是,你需要用这个数字代表什么?

答案 3 :(得分:2)

在被认为是字符串的哈希中返回最左边的数字(当然是1..9)。

或者我错过了这一点?

答案 4 :(得分:2)

你基本上想要哈希函数的哈希函数。这将是一些psedo代码:

int hashhash(string hash)
    return (hash[0] % 9) + 1;

答案 5 :(得分:1)

这是一个解决方案:

return substr(base_convert($md5, 16, 9), -1) + 1;

这是你可能想要的,虽然你没有说出来。