将哈希值(md5,sha1等..)转换为固定范围内的整数

时间:2015-08-29 11:00:18

标签: php algorithm hash md5

假设我有一个散列函数md5并且我散列了一些字符串,它给了我一些值,我需要将它转换为具有固定范围的整数值。

正如crc32() algorithm to convert md5 (or maybe another hashing method?) to integer where it is possible to set possible resulting integer ranges (eg: 1-10000)?

所述

例如,让我们说:

$value=md5("dog");
echo $value;

Output: "06d80eb0c50b49a509b49f2424e8c805"`

现在我需要将此值转换为整数,以便我可以在大小为1000的查找表中使用它。因此,当我转换它时,此哈希值的大小应介于0到999之间。我该怎么办?那?

1 个答案:

答案 0 :(得分:1)

您可以使用base_convert将十六进制输出从md5更改为十进制,然后使用bcmod函数将其转换为所选范围内的数字:

<?php
$valuetohash = "dog";
$range = 1000;
$hashslot = bcmod(base_convert(md5($valuetohash), 16, 10), $range);
echo $hashslot;

输出:26

改变&#34;狗&#34;鹦鹉&#34;产生800,将其改为&#34; cat&#34;产生260(,有趣的是,表明猫比狗好10倍)。

注意,如果您使用的是不会映射到&#34;大十六进制数&#34;的其他哈希值,例如crc32映射到整数,则需要以不同的方式执行上述操作(在例如,根据您问题的原始评论,您可以直接将其修改为范围,例如,根据您的问题的原始评论)。