次のプロパティを持つ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
このアプリケーションでは、ランダムな衝突は完全に致命的ではありませんが、可能な限り回避したいと思います。
これらの要件を考えると、これを解決するための最良の方法は何ですか?