UUIDバージョン判定ツール|v1〜v8・Nil・Maxを色分け解析
UUID文字列を貼り付けるだけで、v1からv8までの全バージョンとNil・Max・無効を判定。13桁目のバージョンニブルと17桁目のバリアントビットを16進バイト表示で色分けし、v1・v6・v7に埋め込まれたタイムスタンプ、v1・v6のクロックシーケンスとノードMACまで抽出。
💡 このツールについて
ログに並ぶ大量のUUIDを前に「これは時刻ベースか、それとも完全な乱数か」を見分けたい場面は多いものです。目視では13桁目の1文字がバージョンを表すことは分かっても、17桁目のバリアントビット判定や、v1の60ビットタイムスタンプを1582年起点のグレゴリオ暦から逆算する作業は手計算では現実的ではありません。
このツールは入力されたUUIDを32桁の16進数に正規化し、RFC 4122(v1〜v5)とRFC 9562(v6・v7・v8・Nil・Max)の両方の仕様に沿って判定します。ハイフン区切り・波括弧付き・urn:uuid:プレフィックス付きのいずれの形式も受理するため、コードからコピーした文字列をそのまま貼れます。バージョンニブルとバリアントビットは色分けハイライトされるので、UUIDのビット構造を学びながら確認できます。
🧐 よくある質問
Q. UUIDのバージョンはどの桁で判定していますか? A. ハイフンを除いた32桁の16進数のうち、13桁目(3グループ目の先頭1文字)がバージョンニブルです。この値が1なら時刻ベース、4なら乱数ベースを示します。
Q. バリアントとバージョンの違いは何ですか? A. バージョンは「生成方式」(時刻・乱数・名前ハッシュなど)を表し、バリアントは「ビットレイアウトの規格」を表します。17桁目の上位ビットを見て、RFC 4122・NCS・Microsoft・予約のいずれかを判定します。一般的なUUIDはRFC 4122バリアントです。
Q. v1とv7のタイムスタンプ起点は同じですか? A. 異なります。v1とv6は1582年10月15日(グレゴリオ暦改暦日)を起点とした100ナノ秒単位、v7はUnixエポック(1970年1月1日)からのミリ秒です。本ツールはそれぞれの起点で計算し、ISO 8601形式で表示します。
Q. v2が「概要」に詳しく出ないのはなぜですか? A. v2はDCEセキュリティUUIDで、RFCでも限定的な定義にとどまり実運用例が少ないためです。バージョン番号としては判定しますが、タイムスタンプ抽出の対象外としています。
Q. すべて0のUUIDを入れるとどうなりますか? A. Nil UUIDとして判定されます。すべてのビットが1の場合はMax UUIDです。どちらもRFC 9562で定義された特殊値で、未設定値やプレースホルダとして使われます。
📚 UUIDバージョンをめぐる豆知識
国内のシステム開発では長らくv4(乱数)が標準でしたが、近年はデータベースのインデックス効率を意識してv7へ移行する動きが広がっています。v4は完全な乱数のため主キーにすると挿入位置が分散しBツリーが断片化しますが、v7は先頭48ビットが生成時刻のミリ秒なので時系列でほぼ昇順に並びます。v6はv1のタイムスタンプ部分を並べ替えて辞書順ソートを可能にしたバージョンで、既存のv1資産を持つシステムの移行先として設計されました。バージョンニブル1文字の違いが、ストレージの挙動を大きく左右するわけです。