コンテンツへスキップ

UUID生成(v4・v7)

ブラウザ内処理ファイルはアップロードされませんこの処理はブラウザ内で完結します。ファイルはどこにも送信されません。

重複しない識別子をまとめて作ります。完全な乱数のv4と、生成した時刻順に並ぶv7の両方に対応しています。大文字やハイフン無しの形にもその場で変えられます。

設定

乱数はブラウザの暗号用乱数(crypto.getRandomValues)から取っています。

結果

    設定v7・5個・小文字生成0199c1f2-6a10-7b3c-…0199c1f2-6a11-7c4d-…0199c1f2-6a12-7d5e-…乱数は crypto.getRandomValues から取り、サーバーは通りません。
    v4 は完全な乱数で、並べても順序に意味がない。v7 は先頭に時刻を持つので、生成順に並ぶ——データベースの主キーにすると挿入位置が偏らない。
    ツール一覧

    特長

    暗号用の乱数から作る
    ブラウザの暗号用乱数(crypto.getRandomValues)を使っています。Math.randomは使いません——あちらは予測できてしまうため、識別子を推測される余地が残ります。
    v7も出せる
    v7は先頭にミリ秒の時刻が入るため、生成した順に並びます。同じミリ秒に作った分も、時刻の下の連番で順序が決まります。データベースの主キーにすると索引が素直に伸びるので、v4より書き込みが軽くなります。
    版とバリアントのビットを正しく立てる
    16進32桁を並べただけではUUIDになりません。版番号と変種を示すビットを規格どおりに立てているので、厳密に検証するライブラリでも通ります。

    使い方

    1. 版を選ぶ

      用途が決まっていなければv4で構いません。データベースの主キーに使うならv7が向きます。

    2. 件数と書式を決める

      最大50件まで。大文字とハイフン無しは、貼り付け先の都合に合わせて切り替えてください。

    3. 取り出す

      1件ずつでも、まとめてでもコピーできます。まとめた場合は1行に1件で並びます。

    用語と読み方

    v4 と v7 の違い
    v4は122ビットが完全な乱数です。v7は先頭48ビットが生成時刻(Unixミリ秒)で、残りが乱数になります。並び順が要るならv7、順番を知られたくないならv4です。
    重複しないのか
    v4で衝突する確率は現実には無視できます。1秒あたり10億個を85年作り続けて、ようやく1回衝突する程度の見積もりです。
    GUIDとの違い
    同じものです。GUIDはMicrosoft系での呼び方で、書式も互換です。中括弧で囲む流儀がありますが、値そのものは変わりません。
    書式(8-4-4-4-12)
    16進32桁を、ハイフンで5つの塊に区切った形が標準です。ハイフンは飾りではなく書式の一部なので、外した32桁を受け付けない相手もあります。逆に、データベースの列に入れるときは16バイトのまま持つほうが、文字列で持つより半分以下の大きさで済みます。
    「連番の代わり」に向く場合と向かない場合
    複数の場所で同時に採番したいときは向きます。中央で番号を配る仕組みが要らず、衝突も起きないためです。逆に、人が読み上げたり手で打ったりする番号には向きません。32桁を口頭で伝えるのは現実的ではないので、伝票番号のような用途には短い連番のほうが合います。
    v1 と v4 の違い
    v1は時刻とネットワーク機器のMACアドレスから作ります。作った機器が特定できてしまうため、外に出す識別子には向きません。時刻順に並べたい目的なら、MACを含まないv7のほうが安全です。この道具がv1を出さないのはそのためです。

    よくある質問

    生成した値は保存・送信されますか。
    されません。すべてブラウザの中で作られ、ページを閉じれば消えます。
    v7から生成時刻が分かってしまいますか。
    分かります。先頭にミリ秒の時刻がそのまま入っているためです。作られた時期を知られたくない用途ではv4を選んでください。
    パスワードの代わりに使えますか。
    勧めません。UUIDは秘密にする前提の値ではなく、URLやログに現れることが多いためです。秘密が要るならパスワード生成の道具を使ってください。
    大文字と小文字は区別されますか。
    規格上、生成するときは小文字で出し、読み取るときは大文字も受け付ける決まりです。つまり同じ値として扱われます。ただし、文字列としてそのまま比較しているシステムでは別物になるので、貼り付け先が大文字を求めている場合だけ切り替えてください。既定は小文字です。
    v7をデータベースの主キーにすると、なぜ速いのですか。
    索引の伸び方が変わるためです。v4は完全な乱数なので、新しい行が索引のあちこちに挿し込まれ、ページの分割が頻繁に起きます。v7は先頭が時刻なので、新しい行はほぼ末尾に積まれます。追記に近い動きになるぶん、書き込みが軽く、断片化も進みにくくなります。
    一度に何件まで作れますか。
    50件までです。これ以上をまとめて必要とする場面は、たいてい手作業ではなくプログラムから生成する場面で、その場合はここで作るより、使っている言語の標準ライブラリを呼ぶほうが確実です。ほとんどの言語に組み込みの生成関数があります。
    スポンサーリンク