4

我需要为一些短字符串创建唯一的数字 id。

some.domain.com    -> 32423421
another.domain.com -> 23332423
yet.another.com    -> 12131232

是否有一个 Perl CPAN 模块可以做这样的事情?

我试过使用 Digest::MD5 但结果数字太长:

some.domain.com    -> 296800572457176150356613937260800159845 
4

3 回答 3

16

只需取 MD5 哈希的前 8 位数字。这是因为MD5均匀分布在其散列地址空间中。这意味着任何连续的 MD5 哈希数字序列本身将是一个均匀分布的哈希。

或者,只需使用其他一些返回 8 个数字的均匀分布的散列机制。对你来说最简单的。

于 2009-03-26T16:04:22.013 回答
4

鉴于字符串看起来像主机名,也许您只需将它们解析为 ip,并将 ip 呈现为整数?

有一些像:

perl -le 'my $ip = gethostbyname("depesz.com"); my $num = unpack("N", $ip); print $num'
1311657670
于 2009-03-26T16:57:45.210 回答
4

Digest ::CRCString::CRC32。第一个为您提供计算 8 位、16 位和 32 位校验和的选项,而第二个仅支持 32 位。

于 2009-03-26T16:13:30.447 回答