UUIDデコーダー&バリデーター | バージョン (v1, v4, v7) と時間の分析
上記のフィールドにUUIDを入力すると、このツール(UUIDパーサー)は即座にオンラインでチェックを行い、バージョン、有効性を特定し、隠された情報を抽出します。
UUIDデコーダーとは?
UUIDデコーダーは、UUID(Universally Unique Identifier)を解析し、そこから利用可能なすべての情報を抽出するツールです。UUIDは単なるランダムな文字列ではなく、バージョンに応じてタイムスタンプ、システム情報、または決定論的なデータのハッシュを含む場合があります。
UUIDからどのような情報を取得できますか?
UUIDの基本情報
UUIDのバージョン:
- UUIDのタイプと構造を決定します (v1, v3, v4, v5, v6, v7)
- 13番目の16進数文字から抽出されます
バリアント:
RFC 4122- 標準UUIDバリアントNCS- Network Computing System (非推奨)Microsoft- Microsoft GUIDバリアントReserved- 将来の使用のために予約済み
UUID v1 - タイムスタンプ + MACアドレス
取得できる情報:
- ✅ 正確な作成時刻 - 100ナノ秒単位の精度で日付と時刻
- ✅ クロックシーケンス - 衝突防止のためのシーケンス番号
- ✅ ノードID - 元々はMACアドレスですが、多くの場合ランダムな値です
例:
UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
バージョン: v1 (タイムスタンプ + MAC)
バリアント: RFC 4122
日付と時刻: 1997年10月15日 04:25:33.000
クロックシーケンス: 724
ノードID: 00:C0:4F:D4:30:C8
使用例:
- レコードがいつ作成されたかを確認
- 監査およびフォレンジック分析
- 時間依存の問題のデバッグ
UUID v3/v5 - ハッシュベース
取得できる情報:
- ✅ ハッシュタイプ - MD5 (v3) または SHA-1 (v5)
- ❌ 取得不可 - 元のネームスペースと名前 (一方向ハッシュのため)
例:
UUID: 886313e1-3b8a-5372-9b90-0c9aee199e5d
バージョン: v5 (SHA-1ハッシュ)
バリアント: RFC 4122
タイプ: ハッシュベースUUID (決定論的)
注: 元のネームスペースと名前はUUIDから復元できません
使用例:
- UUIDが決定論的であることを確認
- データベース内のUUIDのタイプを識別
- ハッシュベースの識別子の一貫性をチェック
UUID v4 - ランダム
取得できる情報:
- ✅ バージョン - ランダムであることを確認
- ✅ バリアント - RFC 4122標準
- ❌ 追加データなし - 純粋なランダムビット
例:
UUID: f47ac10b-58cc-4372-a567-0e02b2c3d479
バージョン: v4 (ランダム)
バリアント: RFC 4122
タイプ: ランダム生成されたUUID
使用例:
- UUIDがランダムであること(決定論的ではないこと)を確認
- UUIDの正しいフォーマットをチェック
- データベースに保存する前のUUIDの検証
UUID v6 - ソート可能なタイムスタンプ
取得できる情報:
- ✅ 正確な作成時刻 - DBパフォーマンス向上のために再配置されています
- ✅ クロックシーケンス - シーケンス番号
- ✅ ノードID - ノード識別子
例:
UUID: 1ec9414c-232a-6b00-b3c8-9e6bdeced846
バージョン: v6 (ソート可能なタイムスタンプ)
バリアント: RFC 4122
日付と時刻: 2026年1月30日 14:23:45.123
クロックシーケンス: 3272
ノードID: 9E:6B:DE:CE:D8:46
使用例:
- レコードの作成時刻を特定
- DB内の時系列ソートの分析
- 分散システムのデバッグ
UUID v7 - Unixタイムスタンプ
取得できる情報:
- ✅ Unixタイムスタンプ - 1970年1月1日からのミリ秒数
- ✅ 日付と時刻 - 標準のUnixタイムスタンプ形式
- ❌ ランダム部分 - デコードできません
例:
UUID: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
バージョン: v7 (Unixタイムスタンプ)
バリアント: RFC 4122
日付と時刻: 2026年1月30日 14:23:45.123
使用例:
- 最新のUUIDの作成時刻を取得
- 時系列の分析
- タイムスタンプ付きデータの移行
UUIDの構造
UUIDのフォーマット: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
6ba7b810-9dad-11d1-80b4-00c04fd430c8
│ │ │ │ │ │ │ │ └───────────┴─ ノード (48ビット)
│ │ │ │ │ │ └──┴─────────────── クロックシーケンス (14ビット)
│ │ │ │ └──┴────────────────────── バリアント (2-3ビット)
│ │ └──┴───────────────────────────── バージョン (4ビット) + Time High
│ └──────────────────────────────────── Time Mid (16ビット)
└─────────────────────────────────────────── Time Low (32ビット)
バージョンとバリアントの抽出
バージョン (M):
- 位置: 13番目の16進数文字
- 値: 1-7 (異なるUUIDバージョン)
バリアント (N):
- 位置: 17番目の16進数文字
0-7: NCS (予約済み)8-B: RFC 4122 (標準)C-D: MicrosoftE-F: 将来 (予約済み)
実用例
デバッグ - レコードの作成時刻の特定
シナリオ: ユーザーがデータが消えたと報告しています。レコードがいつ作成されたかを確認する必要があります。
UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
デコード: 1997年10月15日 04:25:33.000
→ レコードは1997年に作成されました
フォレンジック分析 - 時系列の検証
シナリオ: イベントが正しい順序で発生したかどうかを確認します。
UUID 1: 1ec9414c-232a-6b00-b3c8-9e6bdeced846 → 2026年1月30日 14:23:45
UUID 2: 1ec9414d-557b-6a00-8f32-1234567890ab → 2026年1月30日 14:25:12
→ UUID 2は後で作成されました(正しい順序)
データベース内のUUIDタイプの識別
シナリオ: DBに混在するUUIDがあり、どれがランダムでどれがタイムスタンプを持つかを知る必要があります。
f47ac10b-58cc-4372-a567-0e02b2c3d479 → v4 (ランダム、タイムスタンプなし)
6ba7b810-9dad-11d1-80b4-00c04fd430c8 → v1 (タイムスタンプあり)
017f22e2-79b0-7cc3-98c4-dc0c0c07398f → v7 (タイムスタンプあり)
→ v1とv7のUUIDのみが時間情報を含んでいます
制限事項と取得できない情報
❌ UUID v3/v5 - ハッシュをデコードできません
不可能なこと:
- 元のネームスペースを復元
- 元の名前/値を復元
- どのデータがハッシュ化されたかを特定
理由: MD5とSHA-1は一方向ハッシュ関数です。
❌ UUID v4 - 隠されたデータなし
不可能なこと:
- いかなるメタデータも取得
- 作成時刻を特定
- ソースを識別
理由: UUID v4は純粋にランダムであり、構造化された情報を含んでいません。
⚠️ UUID v1/v6 - ノードIDはランダムな場合があります
制限事項:
- 最新の実装では、ノードIDは多くの場合ランダムです(実際のMACアドレスではありません)
- プライバシー保護のため、MACアドレスはしばしばランダムな値に置き換えられます
- 特定のマシンを確実に識別することはできません
UUIDの検証
デコーダーはUUIDバリデーターとしても機能します。
UUIDの有効性チェック
デコーダーは自動的に以下を検証します:
- ✅ 正しいフォーマット (8-4-4-4-12の16進数文字)
- ✅ 有効な16進数文字 (0-9, a-f)
- ✅ 正しい長さ (ハイフンを含む36文字、含まない32文字)
無効なUUIDの認識
無効な例:
❌ 6ba7b810-9dad-11d1-80b4 (短すぎる)
❌ 6ba7b810-9dad-11d1-80b4-GHIJKLMN (無効な文字)
❌ 6ba7b81-09dad-11d1-80b4-00c04fd4 (不正なフォーマット)
開発者向け
JavaScriptでの実装
// UUIDからバージョンを抽出
function getUUIDVersion(uuid) {
const cleaned = uuid.replace(/-/g, '');
return parseInt(cleaned[12], 16);
}
// UUID v7からタイムスタンプを抽出
function extractV7Timestamp(uuid) {
const cleaned = uuid.replace(/-/g, '');
const timeHi = parseInt(cleaned.substring(0, 8), 16);
const timeLow = parseInt(cleaned.substring(8, 12), 16);
const unixMs = Number(BigInt("0x" + cleaned.substring(0, 12)) >> 16n);
return new Date(unixMs);
}
// 例
const uuid = '017f22e2-79b0-7cc3-98c4-dc0c0c07398f';
console.log(getUUIDVersion(uuid)); // 7
console.log(extractV7Timestamp(uuid)); // Date object
正規表現によるUUIDの検証
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
function isValidUUID(uuid) {
return uuidRegex.test(uuid);
}
よくある質問 (FAQ)
UUID v4から作成時刻を取得できますか?
いいえ、UUID v4は純粋にランダムであり、時間情報は含まれていません。時間情報を含むUUIDにはv1、v6、またはv7を使用してください。なぜUUID v1のノードIDがMACアドレスではなくランダムなのですか?
最新の実装では、プライバシー保護のためにランダムなノードIDが使用されています。実際のMACアドレスが公開されると、セキュリティリスクになる可能性があります。UUID v5から元のURLや名前を復元できますか?
いいえ、UUID v5はSHA-1ハッシュを使用しており、これは一方向です。ハッシュから元のデータを復元することはできません。UUIDがランダム(v4)であるかどうかをどのように判断しますか?
デコーダーはUUIDのバージョンを表示します。バージョンが4の場合、追加のメタデータを含まないランダムに生成されたUUIDです。UUID v1のタイムスタンプは正確ですか?
はい、UUID v1は理論上100ナノ秒の精度(1582年10月15日以降)を持っています。実際には、システムクロックの精度に依存します。デコーダーをUUIDの検証に使用できますか?
はい、デコーダーはUUIDのフォーマットを自動的に検証し、UUIDが無効な場合はエラーを表示します。セキュリティとプライバシー
UUIDは何を明らかにするのか?
UUID v1/v6:
- ⚠️ 作成時刻 - 操作のタイミングを明らかにする可能性があります
- ⚠️ 潜在的にMACアドレス - デバイス識別のリスク(最新の実装ではランダム)
UUID v4:
- ✅ 安全 - メタデータを含まない
UUID v7:
- ⚠️ Unixタイムスタンプ - 作成時刻を明らかにする
推奨事項
- ✅ 最大限のプライバシー保護のためにUUID v4を使用してください
- ⚠️ 公開APIでUUID v1/v6/v7を使用する場合は注意してください(時間情報が明らかになります)
- ✅ UUID v5は決定論的ですが、元のデータは明らかになりません
- ⚠️ MD5ハッシュは完全に安全ではありません
興味深い事実
- 最も古いUUID v1の可能性: 1582年10月15日 00:00:00 (グレゴリオ暦の開始)
- 最も新しいUUID v7: 10889-08-02 05:31:50.655 (ミリ秒単位のUnixタイムスタンプの限界)
- UUID v1の精度: 100ナノ秒 (理論上毎秒1000万個のUUID)
- UUID Nil:
00000000-0000-0000-0000-000000000000(特殊な「空の」UUID) - UUID Max:
ffffffff-ffff-ffff-ffff-ffffffffffff(最大値)
さまざまなシステムでの使用
PostgreSQL
-- UUIDのバージョンを抽出
SELECT substring(id::text, 15, 1) as version
FROM users;
-- バージョンによるフィルタリング
SELECT *
FROM users
WHERE substring(id::text, 15, 1) = '4';
MySQL
-- UUIDフォーマットのチェック
SELECT id
FROM users
WHERE id REGEXP '^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$';