本文へスキップ

UUID生成

UUID Generator

UUIDのv1・v4・v5・v7をまとめて作り、v1やv7に埋まっている時刻を取り出します。

UUIDをブラウザの中で作ります。ただの乱数ならv4、生成した時刻の順に並んでほしいならv7、同じ入力から必ず同じidが出てほしいならv5かv3です。読み解くこともできます。UUIDを貼り付けると、バージョンとvariantのビットを読み、v1・v6・v7なら中に埋まっているタイムスタンプまで取り出します。

🔒 ブラウザの中だけで動きますuuidgeneratorid
バージョン

乱数122ビット。既定であり、並び順が要らないならこれが正解です。

個数

UUID 0個

    このタブで `crypto.getRandomValues` を使って作ります。サーバーには何もリクエストしないので、この値を見た人はほかに誰もいません。

    UUIDの中身を見る

    UUIDを貼り付けると、バージョンとバリアントのビットを、v1・v6・v7ならその中のタイムスタンプまで読み取ります。

    バージョンとバリアントのビットはRFC 9562に従い、付録Aの実例と突き合わせてあります。v1とv6のノードIDはマルチキャストビットを立てた乱数です。ブラウザには漏らすMACアドレスがありません。

    使い方

    1. バージョンを選びます

      理由が無いかぎりv4です。理由はたいてい並び順です。v7は先頭のビットにUnixのミリ秒を持っているので、これをキーにしたテーブルは挿入順のまま保たれ、インデックスが断片化しません。

    2. 表記を決めます

      大文字、ハイフン、そしてWindowsや.NETが使う`{…}`の波括弧です。変わるのは文字だけで、その下にある128ビットは変わりません。

    3. v3・v5ならネームスペースと名前を渡します

      これらのバージョンは2つをまとめてハッシュにかけます。だからDNSのネームスペースに`www.example.com`を渡せば、いつどこで実行しても同じUUIDになります。それが存在理由であり、乱数でない理由です。

    4. まとめてコピーするか、1つを読み解きます

      「すべてコピー」は一覧をまるごと持っていき、各行の横の読み解きはその値を下の解析欄に入れます。元の16バイトも一緒に表示します。

    よくある質問

    トークンとして使えるだけの無作為性がありますか

    v4は`crypto.getRandomValues`から取った122ビットの乱数を持ちます。本物のCSPRNGで、122ビットの秘密と同じだけ推測しにくいものです。ただしv1・v6・v7は大部分がタイムスタンプで、v3・v5は誰かが推測できるかもしれない入力のハッシュです。予測できないのはv4だけです。

    v1はMACアドレスを漏らしますか

    ここでは漏らしません。もともとのv1はネットワークカードのアドレスを使っており、あの評判はそこから来ています。ブラウザはそのアドレスに触れられないので、ノードのフィールドはマルチキャストビットを立てた乱数です。仕様がまさにこの場合のために用意している逃げ道です。

    v5をまとめて作ると、全部が同じにならないのはなぜですか

    行ごとに名前の後ろへ連番を付けているからです。そうしないと10個作っても同じ値が10回並ぶだけで、正しくはあっても使い道がありません。まさにその名前のハッシュが必要なら、1つずつ作ってください。

    UUIDは主キーに向いていますか

    v7ならたいてい向いていて、v4ならたいてい向いていません。乱数のキーは挿入がB木全体に散らばってインデックスを断片化させ、大きなテーブルではその差が数字に出ます。すでにv4を使っていてつらいなら、みなが選ぶ移行先はv7です。

    ここから渡せます

    次の一手

    このツールが出したものをそのまま受け取れる道具です。