例如:
return md5(234); // returns 098f6bcd4621d373cade4e832627b4f6
但我需要
return numhash(234); // returns 00978902923102372190
(20 numbers only)
问题在于我希望哈希值较短。
编辑: 好的,让我解释一下背景。 我有一个网站,为每个注册用户分配了一个ID。此外,我需要为用户分配一个ID以供使用和交换(因此它不能太长)。到目前为止,ID编号一直是00001、00002、00003等等...
- 这会让某些人看起来更重要
- 这会泄露我不想透露的应用程序信息。
为了解决第1点和第2点,我需要“隐藏”数字,同时保持其唯一性。
编辑+解决方案:
基于https://dev59.com/l3A75IYBdhLWcg3wSm64#23679870的代码实现的数字哈希函数。
/**
* Return a number only hash
* https://dev59.com/l3A75IYBdhLWcg3wSm64#23679870
* @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
(new Id())->obfuscate($id)
应该正是您所需要的。如果生成的字符串不必太短,最大长度为39个字符,您也可以保留MD5并将其转换为十进制。 - cawabs();
函数。 - Fanky