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

发布于 2024-09-28 08:05:00 字数 224 浏览 3 评论 0原文

有一个 md5 哈希值,例如:

md5("test") = "098f6bcd4621d373cade4e832627b4f6"

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

Having a md5 hash like:

md5("test") = "098f6bcd4621d373cade4e832627b4f6"

How can I write a function to return a number between 1 and 9 every time I pass the md5 hash to it? The number must always be the same, i.e. myfunc("098f6bcd4621d373cade4e832627b4f6") should always return the same number.
Thanks for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

仅冇旳回忆 2024-10-05 08:05:01

这太矫枉过正了,返回最左边的数字的建议是最好的......

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;
}

您甚至可以将最小值和最大值作为参数传递:

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

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

This is WAY overkill, and the suggestion of returning left-most digit is the best...

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

echo myfunc("098f6bcd4621d373cade4e832627b4f6");

This way you can easily change the range of return values you are interested in by modifying the return statment.

Or, a more compact version:

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

You could even pass the min and max as args:

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

myfunc2("098f6bcd4621d373cade4e832627b4f6", 10, 20);
七颜 2024-10-05 08:05:01

最简单的方法:找到 md5 中的第一个数字并返回它:) 您可以使用简单的正则表达式来完成。当然,如果没有找到数字,请记住有一些安全的返回值(但这种情况几乎不会发生)。

Simplest way: find first number in md5 and return it :) You can do it with easy regexp. Of course remember to have some safe return value if no number was found (but it will happen hardly ever).

风吹雨成花 2024-10-05 08:05:01

始终返回1。符合规格!

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

Return 1 all the time. Meets the spec!

More seriously, what do you need this number to represent?

咿呀咿呀哟 2024-10-05 08:05:01

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

或者我错过了重点?

Return the leftmost digit (in 1..9 of course) in the hash considered as a string.

Or have I missed the point ?

嘿咻 2024-10-05 08:05:01

您本质上需要哈希函数的哈希函数。这将是一些伪代码:

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

You essentially want a hash function of your hash function. This would be some psedo code:

int hashhash(string hash)
    return (hash[0] % 9) + 1;
无边思念无边月 2024-10-05 08:05:01

这是一个解决方案:

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

这可能是您想要的,尽管您没有说出来。

Here's a solution:

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

This is what you probably want although you did not say it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文