非エンジニアにもわかる UUID とは?

解説

UUIDユーユーアイディーUniversallyユニバーサリー Uniqueユニーク Identifierアイデンティファイアー)とは、一言で表すと一意と見做せる 128 bit の値です。

この値は、データベースのプライマリキー、インスタンスの識別子などに利用されています。

なぜ 128 bit という有限長の値で一意性を保証できるのか、不思議ですよね。

簡単に説明すると UUID は IETFアイイーティーエフInternetインターネット Engineeringエンジニアリング Taskタスク Forceフォース)の RFC 4122 に基づいており、一般的にビット列を 16 進数(0 ~ 9, A 〜 F)で下記のような 8 桁、4 桁、4 桁、4 桁、12 桁(8 – 4 – 4 – 4 – 12)に分かれた形式で生成します。

0f513aed-46ed-6473-dec0-3d12ecfde8e7

バージョン 4 を前提として、128 bit の内、6 bit はバージョンとバリアント情報の固定値になるので、残りの 122 bit が乱数値となります。

つまり、UUID は 2122 (5 澗 3169 溝 1198 穣 3139 𥝱 6634 垓 9161 京 5228 兆 2411 億 2137 万 8304)通りあるということです。

2122 = 5316911983139663491615228241121378304

この時点で、ほぼ重複しないことが理解できると思います。

よって、一意と見做せるということですね。

因みに、衝突確率については Birthday attack より H 個の値の集合から n 個の値をランダムに選択する場合、1 つの値が 2 個以上選ばれる確率は下記のように概算できます。

試行最小回数を p(n; H) として、衝突確率を p 以上とする時、上記の式を逆にすると近似値が得られます。

クライアントから具体的な試行最小回数と衝突確率を要求された場合に算出すると良いでしょう。

実際には、UUID を生成する 疑似乱数 によって衝突確率が変動するので正確な値ではないことに注意しましょう。

以上です。