UUID生成ツールの使い方
- ランダムなUUIDならバージョン4を生成、作成した時刻の順に並ぶUUIDならバージョン7を生成を選びます。
- 個数(最大1,000)と形式を選びます。ハイフン付きの小文字、ハイフンなしの32桁、WindowsやC#(.NET)でGUIDを書くときの{波かっこ}付き、URN(
urn:uuid:…)から選べます。大文字が必要なシステムなら大文字にするにチェックを入れます。 - コピーで1行に1つずつ並んだ一覧をまとめてコピーできます。生成するを押すたびに新しいUUIDになります。
- 手元のUUIDを確かめたいときはUUIDをチェック・解析を選んで貼り付けます。形式が正しいか、バージョンとバリアント、バージョン1・6・7なら作成日時を表示します。
UUIDとは
UUID(Universally Unique Identifier、汎用一意識別子)は、Microsoftの製品ではGUIDとも呼ばれる128ビットの数で、16進数32桁を8・4・4・4・12桁に区切って書きます。中央の管理者に問い合わせなくても誰でも作れて、しかも重複する確率が極めて低いため、データベースの主キー、APIのリソースID、ファイル形式、OSなどで広く使われています。現在の規格は2024年5月のRFC 9562で、以前のRFC 4122を置き換えました。
どのUUIDにも決まった場所が2つあります。13桁目はバージョンで、残りの部分の作り方を示します。17桁目はバリアントで、RFCの形式なら8、9、a、bのどれかです。そのため、バージョン4のUUIDは必ず xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx(yは8、9、a、b)の形になります。
| バージョン | 作り方 | 時刻順に並ぶか |
|---|---|---|
| 1 | 1582年からの100ナノ秒単位の時刻、クロックシーケンス、ノードID(MACアドレスのことが多い) | 並ばない |
| 3・5 | 名前空間と名前のMD5またはSHA-1ハッシュ。同じ名前からは同じUUID | 並ばない |
| 4 | 122ビットの乱数 | 並ばない |
| 6 | バージョン1の内容を、時刻が先頭に来るよう並べ替えたもの | 並ぶ |
| 7 | 48ビットのUnix時刻(ミリ秒)と74ビットの乱数 | 並ぶ |
| 8 | 作るソフトウェアが決める独自形式 | — |
v4とv7、どちらを使うべきか
バージョン4は昔からの定番で、すべてが乱数なので、いつどこで作られたかが一切わかりません。弱点はデータベースのインデックスです。ランダムなキーはB-treeのあちこちに入るため、挿入のたびに別のページを書き換えることになり、大きなテーブルほど遅く、断片化しやすくなります。バージョン7は現在時刻で始まるので、新しい行はインデックスの末尾に追加されます。連番(AUTO_INCREMENT)に近い動きをしながら、互いに通信しないサーバー同士でも重複しません。RFC 9562も、時刻順のIDが必要な新しいシステムにはバージョン7を勧めています。
その代わり、バージョン7のUUIDを見れば誰でも作成時刻をミリ秒単位で読み取れます。たいていのデータでは問題ありませんが、作成時刻そのものを知られたくない場合(たとえばアカウントの登録日がわかってはいけない公開URL)はバージョン4を選びます。このツールは同じミリ秒内では74ビットの乱数部分をランダムな幅で増えるカウンターとして扱う(RFC 9562 §6.2の方法2)ので、1,000個まとめて作っても作成順に並び、推測もできません。
計算例:UUIDから作成日時を読む
RFC 9562に載っているバージョン7の例は 017F22E2-79B0-7CC3-98C4-DC0C0C07398F です。13桁目の7がバージョン、17桁目の9がRFCのバリアントを表します。先頭12桁の 017F22E279B0 は16進数で、1970年1月1日からの1,645,557,742,000ミリ秒、つまり 2022-02-22T19:22:22Z(日本時間では2022年2月23日 4:22:22)です。同じRFCのバージョン1とバージョン6の例も同じ瞬間を表していて、グレゴリオ暦の初日である1582年10月15日からの100ナノ秒単位で138,648,505,420,000,000です。
| UUID | バージョン | 作成日時(UTC) |
|---|---|---|
017f22e2-79b0-7cc3-98c4-dc0c0c07398f | バージョン7 | 2022-02-22T19:22:22Z |
c232ab00-9414-11ec-b3c8-9f6bdeced846 | バージョン1 | 2022-02-22T19:22:22Z |
1ec9414c-232a-6b00-b3c8-9f6bdeced846 | バージョン6 | 2022-02-22T19:22:22Z |
バージョン1では時刻が下位のビットから3つに分けて置かれるため、作成順には並びません。バージョン6は同じビットを順番どおりに並べ直したものです。
重複する確率はどのくらい?
バージョン4のUUIDは乱数が122ビットなので、取りうる値は2122、約5.3×1036通りです。誕生日のパラドックスで計算すると、重複が1つでも起きる確率が50%になるのは、約2.7×1018個作ったときです。1秒に10億個ずつ作っても約86年かかります。10億個の中に重複がある確率は約1019分の1です。実際に起きた重複は、数学ではなく乱数生成器の不具合(古いライブラリや、同じ乱数状態のままコピーされた仮想マシンなど)が原因です。このページはブラウザの暗号論的に安全な乱数生成器 crypto.getRandomValues を使っています。
形式とヒント
- 大文字・小文字:RFC 9562は小文字での出力を勧め、比較するときは大文字・小文字を区別しないよう求めています。WindowsやSQL Serverの
NEWID()は大文字で表示されます。 - 波かっこはWindowsのレジストリやCOM、.NETの
Guid.ToString("B")が使う書き方です。URN(urn:uuid:…)はXMLなどで使われます。 - 保存方法:36文字のテキストではなく16バイトで保存します。PostgreSQLの
uuid型、MySQLのBINARY(16)、SQL Serverのuniqueidentifier型です。 - コードで作るなら:JavaScriptは
crypto.randomUUID()、Pythonはuuid.uuid4()(Python 3.14からはuuid.uuid7()も)、PostgreSQLはgen_random_uuid()(バージョン18からはuuidv7()も)、JavaはUUID.randomUUID()、.NETはGuid.NewGuid()(.NET 9からはGuid.CreateVersion7()も)です。 - IDではなく秘密の値が必要ならパスワード生成を使ってください。トークンの中身を確かめるならJWTデコードが使えます。
UUIDはブラウザの中で生成され、どこにも送信されません。作成したUUIDの一覧もページに残りません。
よくある質問
UUIDとGUIDの違いは?
実質的に同じものです。GUID(Globally Unique Identifier)は同じ128ビットの識別子のMicrosoftでの呼び名です。現在のWindowsや.NETが作るGUIDはバージョン4のUUIDで、{0F8FAD5B-D9CB-469F-A165-70867728950E} のように大文字・波かっこ付きで書かれることが多いだけです。
バージョン4のUUIDは本当に重複しませんか?
絶対ではありませんが、現実のシステムでは十分です。乱数が122ビットあるので、重複が1つ起きる確率が50%になるまでに約2.7×1018個が必要です。それでもデータベースではUUIDの列に一意制約を付けておくのが普通で、乱数生成器のまれな不具合にも気づけます。
UUIDをパスワードやトークンに使えますか?
おすすめしません。RFC 9562はUUIDを推測しにくいものと考えてはいけないとしています。バージョン7の乱数は74ビットだけで、時刻も読み取れます。弱い乱数を使うライブラリもあります。秘密の値には32バイトの乱数をBase64にしたものなど専用のトークンか、パスワード生成を使ってください。
文字列が正しいUUIDかどうか確かめるには?
UUIDをチェック・解析に貼り付けてください。コードでは、正規表現 ^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$(大文字・小文字を区別しない)が標準バリアントのバージョン1〜8に一致します。Nil UUIDとMax UUIDは別にチェックが必要です。
データベースの主キーにUUIDを使ってもいいですか?
複数のサーバーやオフラインのスマホアプリなど、IDをいろいろな場所で作る場合や、件数を推測されたくない場合に向いています。主キーには、インデックスがコンパクトに保たれる時刻順のバージョン7を選び、UUID型か16バイトのバイナリ列に保存しましょう。
最終更新日:2026年10月16日