如何从 PHP 中的字符串获取 64 位整数哈希?

flo*_*ori 3 php algorithm hash 64-bit integer

我需要字符串的 64 位整数哈希值,例如哈希映射。

在我看来,没有可以返回 64 位整数的原生 PHP 哈希功能?

我认为可以将 sha1 哈希的第一部分转换为整数。但是,这不会带来最佳性能,并且转换似乎很棘手。

当然,无需安装即可使用本机 PHP 函数会很好。

flo*_*ori 5

我尝试了很多,尤其是将完整的 64 位十六进制字符串转换为有符号的 64 位整数。现在我结束了这个:

function sha1_64bitInt($str) {
    $u = unpack('N2', sha1($str, true));
    return ($u[1] << 32) | $u[2];
}
Run Code Online (Sandbox Code Playgroud)

表演是在中间的某个地方。比实现完整的散列算法(如 SimpleHash 或 dbj2)要好得多,而且比对sha1()or的裸调用慢得多crc32

当曾经有更好的解决方案可以转换为 64 位整数时,可以在不破坏向后兼容性的情况下改进此功能(我希望)。