UUIDってなんだよ
Universally Unique Identifier の略。
世界中で絶対に被らないユニークなIDのこと。オンリーワンです。
UIDとどう違うんだ
基本的にUIDっていうとただのユニークなIDのこと、もしくはユーザー識別のIDを指すとおもいます。
しかし、それはDBの中で固有というだけでべつに世界中に同じIDがあっても大丈夫なのですが、UUIDは絶対に世界中どこをさがしても重複していないIDです。
フォーマットも決まっています
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
16進数で8桁-4桁-4桁-4桁-12桁の文字列、IDです。これは絶対。128bitで39桁です。
バージョンって?
UUIDにはバージョンが4種類ある。基本バージョン4を使うことがおおい。
バージョン | 説明 |
---|---|
1 | MACアドレスと日付時刻から生成するUUID |
2 | MACアドレスと日付時刻に加え、ローカルのPOSIXユーザIDから生成するUUID |
3 | URL、完全修飾ドメイン名、オブジェクト識別子及び識別名から生成するUUID(MD5を使っているため非推奨) |
4 | 擬似乱数から生成するUUID |
5 | バージョン3のハッシュ関数をMD5からSHA-1にしたもの |
どうやって作るんだ?
基本的にライブラリで簡単に作れる模様です。
私はPHPエンジニアなのでPHPの話ですが、Laravel5.6以降だとライブラリすら必要なく、以下でバージョン4を作成できるみたいですね。
use Illuminate\Support\Str;
return (string) Str::uuid();
JAVAとかもライブラリなしで簡単に作成できるみたいです。
その他、ramsey/uuid
というライブラリをつかえば素のPHPでもCodeigniterとかでも使えます。
インストール
composer require ramsey/uuid
require_once 'vendor/autoload.php';
use Ramsey\Uuid\Uuid;
$uuid_var1 = Uuid::uuid1();
$uuid_var4 = Uuid::uuid4();
このようにバージョン指定してUUIDを作成できます。
おわりに
決済とか大規模サービスとかミスが許されない大事なところで使うとよさそうですね。
厳密には絶対に被らないことはないらしいですが、明日私の家にロバートダウニーJrがやってくるくらいありえないので、もしかぶってバグがおこった場合、宝くじでも買いに行きましょう。
API仕様書とかでUUIDキボンヌって書いてるのにただのユニークIDをリクエストに求められたり、逆にUIDキボンヌって書いてあるのにUUIDを作って送らないといけないことを経験したので、自分が利用するときはしっかり明記したい所存。
あと、マイクロソフト様がつくったGUIDとかいうのもあるらしいですが、UUIDと同じものらしいです。明確な違いがあればおしえてください。