UUIDデコードとは?
UUIDデコード はUUIDを解析して以下の情報を抽出するプロセスです:
- Version: 48-51ビットの4ビットに基づくUUIDバージョン(1-8)
- Variant: ビット64-65に基づくUUIDバリアント(通常はRFC 4122)
- Components: バージョンに基づくタイムスタンプ、ノードID、その他のデータの抽出
- 生成時間: 時間ベースのUUID(v1、v6、v7の場合)
Example: 123e4567-e89b-12d3-a456-426614174000
は2018-10-03 09:45:32 UTCに作成されたバージョン1のUUIDです。
UUID構造の概要
Format | Description |
---|---|
8-4-4-4-12 | ハイフンで区切られた32桁の16進数 |
バージョンビット | 48-51ビット(13文字目) |
バリアントビット | ビット64-65(17桁目) |
バージョン番号は3番目のグループの最初の16進数桁に表示されます(例: 123e4567-e89b-12d3-a456-426614174000
バージョン1の場合)。
UUIDバージョンによるデコード
Version | デコード可能な内容 |
---|---|
UUID v1 |
|
UUID v3/v5 |
|
UUID v4 |
|
UUID v6 |
|
UUID v7 |
|
ULID |
|
UUIDからのタイムスタンプ抽出
UUIDタイプ | 時間抽出方法 | Epoch |
---|---|---|
UUID v1 | ビット0-31、32-47、48-59を組み合わせてタイムスタンプコンポーネントを再配置 | 1582年10月15日 |
UUID v6 | ビット0-59を抽出(すでに正しい順序) | 1582年10月15日 |
UUID v7 | ビット0-47を抽出(Unixミリ秒) | 1970年1月1日 |
ULID | 最初の10文字のBase32をデコードして48ビットのUnixミリ秒を取得 | 1970年1月1日 |
UUID検証ルール
- 形式チェック: ハイフン付きの8-4-4-4-12の16進数桁
- バージョンチェック: 13文字目は1-8でなければなりません
- バリアントチェック: 17文字目は8、9、A、またはBでなければなりません(RFC 4122の場合)
基本的なUUID検証のための正規表現:
^[0-9a-f]8-[0-9a-f]4-[1-8][0-9a-f]3-[89ab][0-9a-f]3-[0-9a-f]12$
実用的な応用
- 法医学的分析: IDが作成された時期の特定
- Debugging: IDタイムスタンプを通じたシステム動作の追跡
- Auditing: 時系列の整合性の検証
- セキュリティ分析: 偽造または改ざんされたIDの検出
- データ復旧: 時間的関係の再構築
- システム移行: レガシーUUID実装の詳細の理解
MACアドレス抽出(v1/v6)
UUID v1およびv6では、生成時にランダム化されていなければノード識別子(MACアドレス)を抽出できることがあります。
- UUIDから最後の12桁の16進数(48ビット)を抽出
- XX:XX:XX:XX:XX:XXの形式(コロン区切り)
- マルチキャストビットを調べてMACアドレスが実際のものかランダムかを確認
最初のバイトのビット0x01がセットされている場合、それは実際のMACアドレスではなくランダム化されたノードIDである可能性が高いです。
よくある質問
UUID v4が正確にいつ作成されたかを特定できますか?
いいえ。UUID v4は純粋にランダムでタイムスタンプ情報はありません。UUID v4の値から作成時刻を特定することはできません。
時間ベースUUIDのタイムスタンプの精度はどのくらいですか?
UUID v1/v6のタイムスタンプは100ナノ秒精度です。UUID v7およびULIDはミリ秒精度です。ただし、実際のシステムクロックの精度は異なる場合があります。
UUIDバージョン間で変換できますか?
いいえ、同じ識別子値を保持しながらバージョン間で直接変換することはできません。異なるバージョンは根本的に異なる構造を持っています。
UUID v1を生成したコンピュータを特定できますか?
ノードIDがランダム化されていなければ、UUID v1には生成システムのMACアドレスが含まれている場合があります。ただし、多くの最新実装ではプライバシー保護のためにこれをランダム化しています。
UUIDが有効かどうかはどう判断しますか?
形式をチェック(8-4-4-4-12の16進数桁)、バージョン数字(13文字目)が1-8であることを確認し、バリアントビット(17文字目がRFC 4122 UUIDの場合は8、9、A、またはB)を検証します。