一意(ユニーク)かつ、ソートに対してランダムなIDの発行方法
随時増加するあるデータに対して、一意なIDを割り当ててゆきます。
通常は、1, 2, 3, … と連番を割り当てて行けば一意なIDになると思います。
その上で、IDでソートした時に発行順に並ぶのではなく、順番がランダムになるようにしたいのです。
(アルゴリズムを知らない人から、発行順を推測されないようにしたい。)
そこで考えたのが、"1", "2", "3", …という文字列に対するハッシュ(SHA1やMD5)ですが、sha1("1"), sha1("2"), sha1("3"), …とIDを発行していった場合、IDが重複してしまう可能性を心配しています。(とても低い確率ではあることは分かっていますが、皆無ではありません。)
ハッシュ関数を利用する他に、「一意」で「ランダム」で「衝突の可能性がゼロ」である文字列の生成方法はありませんでしょうか?(可能性がゼロというのは物理的に不可能だと思うので、例えばSHA-1であれば、160bitのハッシュが生成されますが、2^160個のIDを発行しても重複しない、ということを考えます。)
一応、規模は1000万ID程度を考えていますが、もっと大きなオーダーでも衝突しないに越したことはありません。
お礼
ありがとうございました。 さっそくDLして使ってみようと思います。