拥有md5哈希,如:
md5("test") = "098f6bcd4621d373cade4e832627b4f6"
每次将md5哈希值传递给它时,如何编写一个函数来返回1到9之间的数字?该数字必须始终相同,即myfunc(“098f6bcd4621d373cade4e832627b4f6”)应始终返回相同的数字。 谢谢你的帮助。
答案 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;
这是你可能想要的,虽然你没有说出来。