本文へ移動
Develop Tools
← 使い方ガイドへ戻る

UUIDを無料で生成する方法|UUIDv4をブラウザで作成

UUIDv4が必要なら、Math.random()で独自実装せず、Browser標準のcrypto.randomUUID()またはCSPRNGを利用するGeneratorで作成します。

暗号学的に安全な乱数からVersion 4とRFC Variantを設定してUUIDv4を生成する流れ
暗号学的に安全な乱数からVersion 4とRFC Variantを設定してUUIDv4を生成する流れ

UUIDをブラウザ内で生成・検証する

UUIDv4・v7の生成、形式・Version・Variant・重複・v7 Timestampの確認を、入力値を外部送信せず実行できます。

UUIDv4を生成する

結論:CSPRNGで122bitのRandom部分を作り、Version・Variant bitを固定する

UUIDv4は128bitのうちVersionとVariantを除く122bitをRandomまたはPseudorandom Dataで構成します。Browserではcrypto.randomUUID()が36文字のv4 UUIDを返します。

高い確率で一意になりますが、中央Registryで予約された値でも数学的に衝突不可能な値でもありません。利用先にはUnique制約を用意します。

DevelopToolsはrandomUUID()を優先し、非対応時もgetRandomValues()へFallbackします。

生成結果のVersionとVariantを確認する

標準表記xxxxxxxx-xxxx-4xxx-[89ab]xxx-xxxxxxxxxxxxでは、3番目Group先頭が4、4番目Group先頭が8・9・a・bです。

大文字・小文字はbit値を変えません。受け渡し先のStyleへ合わせても同じUUID値です。

確認項目確認方法判断
乱数源Web Crypto APICSPRNG
Version3番目Group先頭4
Variant4番目Group先頭8/9/a/b
重複生成後と保存先Unique制約

UUID生成・検証ツールで確認する手順

  1. Versionでv4を選びます。
  2. 必要件数と表示形式を選びます。
  3. 生成してVersion・Variantを確認します。
  4. 利用先へCopyまたはFile保存します。

生成件数を増やしてもUUID本体をlocalStorageへ保存しません。

Browser標準APIとFallbackの境界

const id = crypto.randomUUID();
console.log(id); // Version 4 UUID

FallbackではgetRandomValues()で16byteを作り、byte 6の上位4bitを0100、byte 8の上位2bitを10へ設定します。Math.random()だけを乱数源にしません。

形式・Version・Variantを分けて確認する

確認対象位置・条件分かること
文字列表記xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx32桁のHexと4個のHyphenからなる36文字
Version3番目Groupの先頭Nibble(bit 48~51)v1~v8などのLayout識別
Variant4番目Groupの先頭Nibble上位bit残りのFieldをどの規則で解釈するか
値の意味Version固有Field、生成方式、利用側制約時刻・名前空間・乱数などの妥当性

RFC 9562の標準テキスト表記は128bitを8-4-4-4-12のHex Groupへ分けます。英字Hexは大文字・小文字・混在を許容します。36文字の形式が正しくても、期待したVersionや用途に合う値であるとは限らないため、段階を分けて確認します。

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
              ^    ^
              |    +-- Variantを含むNibble
              +------- Version Nibble

DevelopToolsのUUID生成・検証ツールでできること

項目現行ツールの仕様
生成UUIDv4・UUIDv7を1~10,000件生成
入力8-4-4-4-12形式、32桁Hex、波括弧付き、urn:uuid:形式を受け付ける
検証形式、Version、Variant、重複、Nil UUID、Max UUIDを確認
UUIDv7RFC Variantのv7から先頭48bitのUnix時刻(ミリ秒)を表示
出力改行、カンマ、JSON、CSV、JavaScript配列、SQL IN句へ変換
保存TXT・CSV・JSONをUTF-8 BOM付きでローカル保存
未対応UUIDv1・v3・v5・v6・v8の生成、ULID・NanoIDの生成
データ保持Version・件数・表示形式などの設定だけをlocalStorageへ保存し、UUID本体は保存しない

検証時は前後の空白を除き、URNや波括弧を外し、32桁Hexを標準形式へ正規化します。形式が正しくても、Version固有のすべてのFieldが用途どおりか、発行元が信頼できるかまでは保証しません。

UUIDv4はcrypto.randomUUID()を優先し、利用できない場合もcrypto.getRandomValues()で16byteを作ってVersion・Variant bitを設定します。UUIDv7は先頭48bitへDate.now()のUnixミリ秒を格納し、同一ミリ秒内では乱数部を加算して画面内の生成順を維持します。

一意性・秘密情報・プライバシーを混同しない

用途UUIDで扱う範囲別に必要な対策
Record ID・Request ID分散環境で調整なしに識別子を生成Unique制約と衝突時の再試行
API Token・Session Secret識別子として参照に使う場合がある十分なEntropy、認可、失効、漏洩対策
改ざん検知UUID単体では変更を検出しない署名、MAC、認証済みMessage
時刻の秘匿v7は先頭48bitからミリ秒時刻を読める時刻を露出しない設計やv4の検討

UUIDは数学的に絶対衝突しない値ではなく、方式ごとの乱数・時刻・Counter・Namespace設計で衝突確率を小さくする識別子です。DBではUUID列へUnique制約を付け、入力競合や再試行を扱える設計にします。

RFC 9562はUUIDを「所持しているだけでアクセスを許可するSecurity Capability」として扱わないよう求めています。UUIDv4がRandomでもPassword、API Key、Reset Token、Session認証の設計を置き換えません。

ブラウザ内で扱う場合のプライバシー確認

  • 本番Record IDやUser IDを貼り付ける前に、その値自体が機密情報でないか確認する
  • 現行ツールは生成・検証したUUIDを外部APIへ送信しない
  • コピー後はOSやBrowserのClipboard履歴へ残る可能性がある
  • 画面設定はlocalStorageへ残るが、生成値・検証値・v7 Timestampは保存しない
  • 共有用の記事やIssueには本番UUIDではなくDummy UUIDを使う

ブラウザ内処理はUploadを避けますが、端末のMalware、悪意あるExtension、画面共有、Clipboard監視まで防ぐ保証ではありません。機密性の高い識別子は信頼できる端末で扱います。

一次資料と実行環境を確認する

現行仕様は2024年5月公開のRFC 9562を基準にします。RFC 9562はRFC 4122を置き換えています。LibraryにRFC_4122等の名称が残る場合は互換性のための公式API名として区別し、利用中のRuntime Versionも確認します。

具体例:API Test用UUIDを100件作る

v4、100件、JSON形式を選んで生成し、Version 4とRFC Variantを確認します。

JSON配列として保存し、Test Dataへ割り当てます。投入先DBにはUnique制約を残します。

  1. v4選択
  2. 100件指定
  3. JSON生成
  4. Version確認
  5. 生成結果をJSON形式で保存する

本番Secretの代わりではなく、識別子のTest Dataとして使用します。

よくある質問

UUIDは世界で絶対に重複しませんか?
いいえ。適切な生成方式により衝突確率を非常に小さくする識別子です。利用側でもUnique制約と衝突時の処理を用意します。
UUIDをPasswordやAPI Tokenとして使えますか?
識別子とSecretは役割が異なります。UUIDの所持だけでAccessを許可せず、用途に合う認証・認可・失効設計を使用してください。
入力したUUIDはServerへ送信されますか?
現行のUUID生成・検証ツールは処理をBrowser内で行い、UUID本体をServerや外部APIへ送信しません。