2011-01-09 2 views
4

私は、任意のベースにUUIDをコードし、以下のモジュールを書いた:バイトはUUIDから安全に削除でき、それでもその一意性を保持すると期待できますか?

http://pypi.python.org/pypi/shortuuid/

今、独自性を維持しながら、これはデフォルトのアルファベットと22個のシンボルにそれを取得しますが、私はどのように多くの(/思っていました私は切り捨てることができ、保持された一意性を最大限にすることができます。

UUIDのすべての桁が等しくランダム/ユニークですか、またはいくつかの桁が他よりもランダムですか?たとえば、最初の数桁がマシン/アプリケーション固有の識別子である場合、明らかに、それらは最後の数よりもランダムではありません。私の実験ではこれに気づいていませんが、私は人にアドバイスする前に確信しています。

たとえば8桁に切り捨てると、衝突の確率は1/57^8になるか、数字に一様でない確率はありますか?

答えて

4

はかなりランダムでなければなりません。そして、はい、いくつかは他よりもランダムです。 http://en.wikipedia.org/wiki/Uuid#Version_1_.28MAC_address.29

これを回避する方法の1つは、UUIDのハッシュ(例:sha256)を取ることです。これらのハッシュは一様な方法で配布する必要があります。

私はここで本当に徹底した分析を行っていないことに注意してください。私の答えは野球場にあるはずですが、私はそれが完全に正しいことを保証しません。

+0

ウィキペディアのページに行っていただきありがとうございます。バージョン2以降のすべてがランダムまたはハッシュであるため、数字を安全に切り捨てることができます。 –

1

あなたが扱っているバージョンによって異なります。 UUID年代が構築されている方法で、それは非常に多くのバージョンに依存しているため、バージョン3のものから開始して

http://en.wikipedia.org/wiki/Universally_unique_identifier

関連する問題