1

文字、数字、特殊文字(メールアドレス)で構成される一意の可変長文字列のリストがあります。リスト内の各メールアドレスは一意です。

文字列をソルトでハッシュして12桁の数値を生成する、一方向のハッシュ関数(生成された数値から元の値を取得できる必要はありません)が必要です。

一意性を確保したいので、以前に生成された値のリストをチェックして衝突を検出し、衝突が発生した場合は新しい番号を生成します。予測可能性は問題ではありません。

理想的には、この関数をGroovyで記述したいのですが、Javaでも問題ありません。

4

1 に答える 1

6

生成された各番号が一意になることを保証する必要があります。

それは明らかに問題になるでしょう。可能な出力値よりも多くの可能な入力文字列があります。特に、すべての可能な出力値(12桁の文字列)が可能な入力値です。したがって、それらすべてが一意の出力値を取得する場合、他の入力値に出力値が残っていない可能性があります。

もちろん、遭遇した各電子メールアドレスをいつでも記録できます(したがって、最初のアドレスは000000000000になり、2番目のアドレスは000000000001になります)が、それはハッシュ自体ではなく、ストレージの問題です。バッキングストアがないと、入力だけから出力にアクセスすることはできません。

于 2012-05-16T17:23:32.483 に答える