桶屋ブログ

風が吹いても儲からないSE(仮)のブログ

GUID/UUIDの信頼性

GUID=Globally Unique Identifier(大域的一意識別子)
マイクロソフトが実施しているUUID。簡単に言うと『違いはない!』そうです。
詳しそうなのはここ。
Is there any difference between a GUID and a UUID? - Stack Overflow

してその内容は128bitに16進数で{8桁-4桁-4桁-4桁-12桁}で2^122通りだそうです。ちなみに5.316912e+36、5澗(カン)3169溝(コウ)1198穣(ジョウ)3139𥝱(ジョ)6634垓(ガイ)9161京5228兆2411億2137万8304通りであるそうなのでまあ間違いないですね。

以下GUID=UUIDで話を進めますが
UUIDにはversionがあり
Version.1:The time-based version to MAC address.
Version.2:DCE Security version embeded POSIX UID.
Version.3:The name-based version to MD5 hash.
Version.4:randomly generated version.
Version.5:The name-based version to SHA-1 hash
RFC 4122 - A Universally Unique IDentifier (UUID) URN Namespace
Universally unique identifier - Wikipedia, the free encyclopedia
まあ全部ここに載ってます。enWikipediaのほうが簡潔で分かりやすいッス。

この中でも絶対的信頼がおけるのはVersion.1で意図的に作らない限りは被ることはあり得ないことが分かります。Javaなどで利用されているものはVersion.4だそうで絶対的信頼性はなさそうです。

できたものをマイクロソフトとかUUID財団に問い合わせて一意かどうか確認するとかそういうことではないんですね!(それはすごい手間だよね…)

ちなみに我らのPythonではVer.1,3,4,5を提供しています。
21.20. uuid — RFC 4122 に準拠した UUID オブジェクト — Python 3.3.3 ドキュメント