あなたが思いつくほとんどすべてのアルゴリズムは、あなたの基準を満たすでしょう。例えば
CHECKSUM = SUM( i=0 .. input.length, input[i] )
「bad-char-safe」にする
CHECKSUM = 'A' + SUM( i=0 .. input.length, input[i] ) MODULO 26
出力領域を増やして衝突回数を減らそうとする試み
# Assume BASE64[ ] is the safe output alphabet array.
TMP = SUM( i=0 .. input.length, input[i] ) MODULO 2^24
FOR I = 0..3
CHECKSUM[I] = BASE64[TMP MODULO 64]
TMP = TMP / 64
さまざまな順列に対してさまざまな値を計算することにより、衝突の数をさらに減らすソリューション
# Assume BASE64[ ] is the safe output alphabet array.
TMP = SUM( i=0 .. input.length, i*input[i] ) MODULO 2^24
FOR I = 0..3
CHECKSUM[I] = BASE64[TMP MODULO 64]
TMP = TMP / 64
一般に、これらすべてのバリエーションは、入力が十分にランダムで十分にまばらであれば、かなりうまく機能します (もちろん、「十分」はそれぞれのケースで異なります)。