我需要为一些短字符串创建唯一的数字 id。
some.domain.com -> 32423421
another.domain.com -> 23332423
yet.another.com -> 12131232
是否有一个 Perl CPAN 模块可以做这样的事情?
我试过使用 Digest::MD5 但结果数字太长:
some.domain.com -> 296800572457176150356613937260800159845
只需取 MD5 哈希的前 8 位数字。这是因为MD5均匀分布在其散列地址空间中。这意味着任何连续的 MD5 哈希数字序列本身将是一个均匀分布的哈希。
或者,只需使用其他一些返回 8 个数字的均匀分布的散列机制。对你来说最简单的。
鉴于字符串看起来像主机名,也许您只需将它们解析为 ip,并将 ip 呈现为整数?
有一些像:
perl -le 'my $ip = gethostbyname("depesz.com"); my $num = unpack("N", $ip); print $num'
1311657670
Digest ::CRC或String::CRC32。第一个为您提供计算 8 位、16 位和 32 位校验和的选项,而第二个仅支持 32 位。