本文へスキップ

UUID生成ツール(v4・v7)

UUIDのバージョン4とバージョン7を一度に1〜1000個生成し、貼り付けたUUIDのバージョン・バリアントと、バージョン7に入っている生成時刻を読み取ります。

UUIDを生成

バージョン
一度に1〜1000個まで生成できます。

生成結果

UUID解析

入力した内容はこのブラウザの中だけで処理され、サーバーには送信されません。 仕組みを見る

UUID v4の例と8-4-4-4-12の文字グループ構造

使い方

ページを開くと、バージョン4のUUIDがすでに10個できています。UUIDを生成で変えられるのは次の項目です。

  • バージョン:「v4(完全ランダム)」か「v7(時系列順)」を選びます。選んだ瞬間に作り直されます。
  • 生成する個数:1〜1000の整数で指定します。範囲外の値を入れた場合は、欄の外に出たときに1か1000へ直されます。
  • 大文字、ハイフンなし、中括弧 { }:結果をどう書くかを決めます。
  • 生成する:設定はそのままで、値だけ新しくします。
  • すべてコピー、.txtでダウンロード:結果を1行に1つずつ、まとめて取り出します。ダウンロードされるファイル名はuuid.txtです。各行のコピーボタンを使えば、1つだけ取り出せます。

100個を超えて作ると、画面に並ぶのは最初の100個だけで、残りは「すべて表示」を押すと出てきます。すべてコピーとダウンロードの対象には、隠れている分も含まれます。

その下のUUID解析にUUIDを1つ貼り付けると、「バージョン」「バリアント」「埋め込まれたタイムスタンプ」がわかります。

バージョン4とバージョン7の違い

UUIDは128ビットの値です。このうち6ビットはバージョンとバリアントを書く場所と決まっていて、残る122ビットの埋め方がバージョンごとに違います。

位置 バージョン4 バージョン7
先頭の48ビット ランダム 1970年1月1日(UTC)から数えたミリ秒
4ビット バージョン(4) バージョン(7)
12ビット ランダム RFC 9562ではランダムの場所ですが、このツールはカウンターに使います
2ビット バリアント バリアント
62ビット ランダム ランダム

バージョン4は、値を眺めても何の手がかりも得られません。一方で並び順というものがないため、データベースの主キーにすると、新しい値がインデックスの至るところに割り込みます。その分だけB-treeのページ分割が増え、キャッシュのヒット率も落ちます。

バージョン7は先頭が時刻なので、文字列として並べ替えるだけで作った順に並びます。主キーにすれば、新しい値はインデックスの末尾に足されていきます。その代わり、いつ作られたかがミリ秒の単位まで値から読めてしまいます。会員登録や注文の時刻を外から推測されたくない識別子には、バージョン4のほうが向いています。

バージョン4はブラウザの crypto.randomUUID() で作り、バージョン7のランダム部分は crypto.getRandomValues() で埋めています。どちらも暗号論的に安全な乱数です。

まとめて作ったバージョン7が順番どおりに並ぶ理由

バージョン7を複数個作るとき、その1回分にはすべて同じミリ秒を使います。タイムスタンプで差がつかないので、順番を決めるのはその後ろにある12ビットのカウンターです。

  • 1回分の最初の値では、カウンターを0〜2047のランダムな数から始めます。12ビットなら4095まで書けるところを半分しか使わないのは、あふれないように余裕を残すためです。
  • 2つ目からは、カウンターを1ずつ増やします。一度に作れるのは最大1000個なので、開始値がいちばん大きい2047だったとしても3046で終わり、カウンターがあふれることはありません。
  • 後ろの62ビットは、値を作るたびに引き直します。

たとえばタイムスタンプが2026年1月1日 00:00:00.000(UTC)、カウンターの開始値が2047なら、続けて出る3つの値の先頭部分は 019b76da-a800-77ff、019b76da-a800-7800、019b76da-a800-7801 となります。ハイフンで区切った3番目のグループは、先頭の7がバージョン、続く3桁がカウンターです。

カウンターは、次の回には持ち越しません。「生成する」をもう一度押すと、その瞬間の時刻で仕切り直すので、あとの回に作った値はタイムスタンプの段階で前の回より後ろに来ます。ただし、そのあいだに端末の時計が巻き戻されていると、この順番は保たれません。

衝突の可能性

バージョン4は122ビットがランダムです。誕生日のパラドックスの考え方で計算すると、同じ値が一度でも出る確率が50%に届くのは、約2.7 × 10^18個を作ったときです。1秒に10億個のペースで作り続けても、約86年かかります。

このツールのバージョン7では、値ごとに引き直すランダム部分は62ビットです。同じ回に作った値はカウンターがそれぞれ違うので、重なることはありません。別の端末や別のタブで同じミリ秒に作られた値と重なるのは、カウンターと62ビットのランダム部分がどちらも一致したときだけです。

解析でわかること

解析欄に 018f4d2e-7c3a-7b21-9e2f-1a2b3c4d5e6f を入れると、バージョン7、バリアントは「RFC 9562(標準)」、埋め込まれたタイムスタンプは2024年5月6日 09:14:03(UTC)と読み取ります。時刻はブラウザのタイムゾーンで表示されるので、UTC+9のタイムゾーンなら18:14:03です。

  • バージョンは、3番目のグループの先頭の桁(16進数の13桁目)を数字のまま表示します。標準にない値であっても、そのまま出します。
  • バリアントは、4番目のグループの先頭の桁のビットで決まります。
画面の表示 4番目のグループの先頭の桁 意味
NCS(旧形式互換) 0〜7 昔のNCS方式との互換のために残されている値
RFC 9562(標準) 8、9、a、b 現在使われている標準のUUID
Microsoft(旧GUID形式) c、d 昔のMicrosoft GUIDとの互換用
将来の使用のために予約 e、f まだ定義されていない値
  • すべての桁が0なら「Nil UUID」、すべての桁がfなら「Max UUID」の表示が付きます。RFC 9562によると、Nilは「値なし」を、Maxは一覧の終わりなどを示す目印として使えます。桁の値をそのまま読むので、Nilはバージョン0でNCSのバリアント、Maxはバージョン15で予約済みのバリアントと表示されます。

解析が見ているのは形だけです。16進数32桁でありさえすれば通るので、通ったからといって、実際に発行されたUUIDだとは限りません。手で書き換えた値でも、バージョンの桁が7であれば、その桁の数字どおりにタイムスタンプを読んで表示します。

参考資料

よくある質問

大文字やハイフンなしのオプションを切り替えると、UUIDは作り直されますか?

作り直されません。「大文字」「ハイフンなし」「中括弧 { }」が変えるのは、すでにある値の書き方だけです。値そのものが新しくなるのは、「生成する」を押したとき、「バージョン」を切り替えたとき、「生成する個数」を書き換えて欄の外に出たときの3つです。

ハイフンなしや中括弧は、どんな場面で使うのですか?

ハイフンを省いた32桁の形式は、ファイル名や一部のデータベースの列で扱いやすい書き方です。中括弧で囲んだ形式は、主にWindowsのレジストリやCOMコンポーネントでGUIDを書くときに使われます。3つのオプションをすべてオンにすると、{018F4D2E7C3A7B219E2F1A2B3C4D5E6F} のような形になります。

解析欄にバージョン1のUUIDを入れたら、生成時刻は出ますか?

出ません。解析が読めるのはバージョン7のタイムスタンプだけです。バージョン1やバージョン6のように、時刻を別の方式で持っているUUIDを入れた場合、バージョンとバリアントは表示されますが、「埋め込まれたタイムスタンプ」の欄は「このツールが読み取れるのはバージョン7のUUIDのタイムスタンプだけです。」となります。

urn:uuid: で始まる値や、引用符で囲んだ値も解析できますか?

できません。解析欄が受け付けるのは16進数32桁で、大目に見るのはハイフン、大文字と小文字の違い、両端の中括弧までです。urn:uuid: という接頭辞や引用符が残っていると「正しいUUID形式ではありません。」と表示されるので、外してから入れてください。

最終更新日: