假设我有一个散列函数md5并且我散列了一些字符串,它给了我一些值,我需要将它转换为具有固定范围的整数值。
所述例如,让我们说:
$value=md5("dog");
echo $value;
Output: "06d80eb0c50b49a509b49f2424e8c805"`
现在我需要将此值转换为整数,以便我可以在大小为1000的查找表中使用它。因此,当我转换它时,此哈希值的大小应介于0到999之间。我该怎么办?那?
答案 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映射到整数,则需要以不同的方式执行上述操作(在例如,根据您问题的原始评论,您可以直接将其修改为范围,例如,根据您的问题的原始评论)。