私は、研究者がプライバシーに重要なデータを利用できるようにするために、仮名を多用するシステムに取り組んでいます。これらの仮名には、次のプロパティが必要です。
私の最初のアイデアは ID4 を使用することでした。 (1)と(2)はかなり良いですが、(3)はあまり良くありません。
変形は、より広いアルファベットでUUIDをエンコードし、結果として文字列を短くすることです(たとえば、 shortuuid を参照)。しかし、これが実際に読みやすさを向上させるかどうかはわかりません。
私が現在検討しているもう1つのアプローチは、2005年の論文 "患者IDの最適なコード" で、私の問題に正確に取り組むことを目的としています。そこで説明されているアルゴリズムは、30ビットのエントロピーを持つ8文字の仮名を作成します。しかし、もっと広くレビューされた標準を使用したいと思います。
次に、gitアプローチもあります。実際の仮名の最初の数文字のみを表示します。しかし、これは、仮名がしばらくするとその一意性を失う可能性があることを意味します。
だから私の質問は:人間が読める一意のIDのために広く使われている標準はありますか?
このために広く使用されている標準を認識していません。広く使用されていないものは次のとおりです。
Proquints
https://arxiv.org/html/0901.4016
https://github.com/dsw/proquint
UUID4(128ビット)は8つのプロキントに変換されます。それが多すぎる場合は、UUID4の最後の64ビットを取ることができます(= 64ランダムビットを取るだけです)。これにより、魔法のように独自性が失われることはありません。衝突の可能性を増加させるだけです。これは、最初はゼロではなく、数学的に推定して、目的に問題がないかどうかを判断できます。
この記事 gitと同様に、SHA-256ハッシュの最初の数文字を使用することをお勧めします。 UUIDは通常SHA-1に基づいているため、これはそれほど違いはありません。プロパティ(2)と(3)の間のトレードオフは、文字数にあります。
d
を桁数とすると、合計で2 ** (4 * d)
識別子が得られますが、最初の衝突は2 ** (2 * d)
の後に発生すると予想されます。
大きな問題は、実際には使用する識別子の種類ではなく、衝突をどのように処理するかです。