Perl 是否有一个CPAN模块将短字符串分解为短数字?

Perl 是否有一个CPAN模块将短字符串分解为短数字?,perl,hash,module,md5,cpan,Perl,Hash,Module,Md5,Cpan,我需要为一些短字符串创建唯一的数字ID some.domain.com -> 32423421 another.domain.com -> 23332423 yet.another.com -> 12131232 是否有一个Perl CPAN模块可以执行类似的操作 我尝试使用Digest::MD5,但结果数字太长: some.domain.com -> 296800572457176150356613937260800159845 只取MD5散列的

我需要为一些短字符串创建唯一的数字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个数字。任何对你来说最简单的。

或者。第一个选项提供计算8位、16位和32位chcecksums的选项,而第二个选项仅支持32位。

鉴于字符串看起来像主机名,也许您只需将其解析为ip,并将ip表示为整数

有点像:

perl -le 'my $ip = gethostbyname("depesz.com"); my $num = unpack("N", $ip); print $num'
1311657670

但是冲突的概率增加了?没错,但是当你减少地址空间时,冲突的概率总是增加的。无论如何创建,使用较短的哈希值都会遇到同样的问题。如果它们都指向相同的IP怎么办?有一些IP为大约1000万个主机名提供服务。