UUID(v4・v7)をまとめて生成し、Base58・Base62・Base64URL などの短い表記(ショートUUID)にも変換します。UUID とショートUUID の相互変換、バージョンの判定、v7 に含まれる作成日時の読み取りもできます。生成も変換も、すべてブラウザの中で行います。
UUID(Universally Unique Identifier)は、550e8400-e29b-41d4-a716-446655440000 のような 128 ビットの識別子です。中央で番号を管理しなくても、どこで作っても実質的に重ならないため、データベースの主キー、API のリクエスト ID、ファイル名、テストデータなどに広く使われています。このツールは、ランダムな v4 と、作成時刻の順に並ぶ v7 を最大 10,000 個まで一度に生成し、ハイフンなし・大文字などの表記や、JSON の配列・SQL の IN 句の形でまとめてコピーできます。
36 文字の UUID は URL やファイル名に使うには長いので、同じ 128 ビットの値を Base58 や Base62 で 22 文字に縮めた「ショートUUID」もよく使われます。生成と同時にショートUUID を表示できるほか、手元の UUID とショートUUID を相互に変換したり、ログに出てきた UUID のバージョンや、v7・v1 に埋め込まれた作成日時を読み取ったりできます。
v4 は 128 ビットのうち 122 ビットが乱数で、値から何も読み取れません。v7 は 2024 年 5 月の RFC 9562 で定められた新しい形式で、先頭 48 ビットが Unix 時刻(ミリ秒)、残りが乱数です。作った順に並ぶので、データベースの主キーにすると B-tree インデックスの末尾に追記される形になり、v4 のようにページ分割が散らばりにくくなります。その代わり、値から作成日時が誰にでも分かるので、作成時刻を知られたくない ID には v4 を使います。このツールの v7 は、同じミリ秒の中でまとめて作ったときも順番が崩れないよう、乱数部分を前の値より大きくしています。
v4 で 2 つ以上が重なる確率が 50% になるのは、およそ 2.7×1018 個(毎秒 10 億個を約 86 年)作ったときです。ただし、それは乱数が正しく作られている場合の話です。このツールは暗号用の乱数(crypto.getRandomValues)を使っています。
| 種類 | 文字数 | 使う文字・特徴 |
|---|---|---|
| Base58(Bitcoin式) | 22 | 0・O・I・l を除いた英数字。見間違えにくい |
| Base58(Flickr式) | 22 | 同じ 58 文字で小文字が先。npm の short-uuid の既定 |
| shortuuid(Python) | 22 | さらに 1 を除いた 57 文字 |
| Base62 | 22 | 0-9・A-Z・a-z。記号なし |
| Base64URL | 22 | 英数字と - _。バイト列をそのまま変換 |
| Base36 | 25 | 数字と小文字だけ。大文字小文字を区別しない場所向け |
| Base32(Crockford) | 26 | I・L・O・U を除く。読み上げ・手入力向け |
Base58・Base62・Base64URL は大文字と小文字を区別します。大文字小文字を区別しないデータベースの照合順序や、Windows・macOS の既定のファイル名に使うと別の値が同じとみなされるおそれがあるので、その場合は Base36 か Base32 を選びます。また、同じ 22 文字でも種類が違えば別の UUID に戻るため、ショートUUID を使うときはシステム内で 1 種類に決めておくことが大切です。
Guid.ToByteArray() は先頭 3 つの区切りをリトルエンディアンで並べるため、バイト列にすると順番が変わります。解析の欄に .NET のバイト順も表示しています。uuidv7()、Python 3.14 の uuid.uuid7() など、標準で対応する環境が増えています。ブラウザの crypto.randomUUID() が作るのは v4 です。