在 php 中有没有办法从一个字符串中给出一个唯一的散列,但是散列只由数字组成?
例子:
return md5(234); // returns 098f6bcd4621d373cade4e832627b4f6
但是我需要
return numhash(234); // returns 00978902923102372190
(20 numbers only)
这里的问题是我希望散列很短。
编辑: 好的,让我在这里解释一下背景故事。我有一个网站,每个注册人都有一个 ID,我还需要一个 ID 供该人使用和交换(因此不能太长),到目前为止 ID 编号为 00001、00002、00003 等。 ..
- 这让一些人看起来更重要
- 这显示了我不想透露的应用程序信息。
要修复第 1 点和第 2 点,我需要“隐藏”该数字,同时保持其唯一性。
编辑+解决方案:
基于https://stackoverflow.com/a/23679870/175071代码的数字哈希函数
/**
* Return a number only hash
* https://stackoverflow.com/a/23679870/175071
* @param $str
* @param null $len
* @return number
*/
public function numHash($str, $len=null)
{
$binhash = md5($str, true);
$numhash = unpack('N2', $binhash);
$hash = $numhash[1] . $numhash[2];
if($len && is_int($len)) {
$hash = substr($hash, 0, $len);
}
return $hash;
}
// Usage
numHash(234, 20); // always returns 6814430791721596451