我正在寻找具有以下属性的 Perl 字符串校验和函数:
- 输入:未定义长度的 Unicode 字符串 (
$string
) - 输出:无符号整数 (
$hash
),其中0 <= $hash <= 2^32-1
包含 (0 到 4294967295,匹配 4 字节 MySQL unsigned int 的大小)
伪代码:
sub checksum {
my $string = shift;
my $hash;
... checksum logic goes here ...
die unless ($hash >= 0);
die unless ($hash <= 4_294_967_295);
return $hash;
}
理想情况下,校验和函数应该快速运行,并且应该在目标空间 ( 0
.. 2^32-1
) 中生成某种程度均匀的值以避免冲突。在这个应用程序中,随机碰撞完全不是致命的,但显然我想尽可能避免它们。
鉴于这些要求,解决此问题的最佳方法是什么?