GUIDとUUIDはどちらも一意な識別子を生成する方法ですが、 GUIDはMicrosoft社が定義・実装したもので、 UUIDはRFC4122で定義されているものです 1。 基本的にはどちらも同じですが、厳密には若干仕様に違いがあります。
GUIDとUUIDの違い
GUIDとUUIDの主な違いは、以下のものがあります 2。
- GUIDは全ての桁が任意の16進数であるのに対して、 UUIDはバージョンとバリアントフィールドは指定されたビットを入れないといけない
- GUIDは出力が全て大文字でなければならない (MUST) に対して、 UUIDは出力は小文字にすべきで、入力は大文字小文字の両方を受け付けるべき (SHOULD)
UUID
UUIDの形式は「8-4-4-4-12桁」の次のような構成をしています。Xには16進数(0~9, A~F)が入ります。ハイフンを含めて合計32文字です。
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
(X = 0, …, 9, A, …, F)
UUIDには5つのバージョンがあり、3つ目のグループの最上位桁で表現します(例えばバージョン4のときは、{XXXXXXXX-XXXX-4XXX-XXXX-XXXXXXXXXXXX}
)。
- UUIDバージョン1では、UUIDを生成するコンピュータのMACアドレスとナノ秒単位の時刻を使って計算します。 このため、UUIDが作られたPCとその時刻がばれてしまいます。
- UUIDバージョン2では、ローカルのPOSIXのユーザID(UID)を計算に利用するようになりました。
- UUIDバージョン3では、URL、完全修飾ドメイン名(FQDN)、オブジェクト識別子(OIDs)、その他データから、MD5を使って導出します。 しかし現在MD5は暗号理論的に破られているため、非推奨となっています。
- UUIDバージョン4では、疑似乱数を用いてUUIDを生成します。
- UUIDバージョン5は、バージョン3のハッシュ関数MD5をSHA-1に変更しただけで、他の部分は同じです。
UUIDの値が重複する確率は、毎秒1億個のUUIDを生成することを100年間繰り返して、ようやく50%の確率で衝突するといわれています。 ただし、この理論はUUIDが正しく生成されていることが前提で、実装に不備などがあるとこの通りにはなりません。