ID 内部時刻の解析
Web処理はすべてブラウザ内で完結します。データは送信されません
多くの ID は乱数ではなく、「タイムスタンプ + マシン番号 + シーケンス」を詰め込んだものです —— 一意でありながら時刻順に並べられるようにするためです。つまり `018f3c9a-…` や `1234567890123456789` という文字列は、それ自体が時刻の情報であり、符号化されているだけです。 ここではその時刻を読み出し、どのように埋め込まれているかを説明します: · UUID v7 —— 先頭 48 ビットが Unix ミリ秒(v4 に対する v7 の存在意義そのものです) · UUID v1 / v6 —— 1582-10-15 から数えた 100 ナノ秒単位 · ULID —— 先頭 10 文字の Crockford Base32 がミリ秒 · MongoDB ObjectId —— 先頭 4 バイトが秒 · Snowflake —— 上位ビットがミリ秒ですが起点は実装ごとに異なります · Windows FILETIME —— 1601-01-01 から数えた 100 ナノ秒 ⚠️ Snowflake の起点は明示的に選ぶ必要があります。ビット配置は共通(タイムスタンプを 22 ビット左シフト)ですが起点は異なり、Twitter は 2010-11-04、Discord は 2015-01-01 です。起点を誤ってもエラーにはならず、数年ずれた、もっともらしい日付が返ります —— そのため起点とその出典を結果に表示します。
機能
- UUID(v1/v3/v4/v5/v6/v7/v8)・ULID・MongoDB ObjectId・Snowflake ID・Windows FILETIME を判別
- 埋め込まれた時刻を ISO 8601 に変換し、ビット配置の説明も表示
- ⚠️ UUID v1 のタイムスタンプは文字列内で順序が入れ替わっています(下位 32 ビットが先頭、上位 12 ビットが末尾)。順に読むと完全に誤った数値になります —— ここでは個別に処理します
- ⚠️ Snowflake は BigInt で解析:64 ビット整数は 2^53 を超えると Number が下位のシーケンスを失いますが、タイムスタンプ(上位ビット)は正常に見えるため誤りが露見しません
- ⚠️ Snowflake の起点を明示的に選択可能(Twitter / Discord / Instagram / Unix エポック)。影響も結果に明記します
- ⚠️ ULID は最も見落とされる正当性の規則も検査します:先頭の文字は 0〜7 でなければなりません(130 ビット符号化の余分な 2 ビットは 0 でなければならず、それより大きいと 128 ビットを超えます)。長さと文字種しか見ない検証器はこれを通してしまい、数十年後の日付を返します
- 小文字を含む ULID、または I / L / O を含む ULID は Crockford の曖昧さの規則(I・L は 1、O は 0)で復元し、正規の表記ではないことを明示します
- ObjectId は 3 つのフィールドに分けて表示します —— 4 バイトの秒、5 バイトのプロセス乱数、3 バイトのカウンタ。同じ秒の中での前後は末尾 6 文字のカウンタで判断します
- v4 など時刻を含まない形式は、空欄ではなく「時刻を含まない」と明示
- 複数行に対応し、行ごとにまとめます
使い方
- ID を 1 行に 1 つ貼り付けます
- Snowflake の場合は、生成時の起点をオプションで合わせます
- 結果に判別した形式・埋め込まれた時刻・ビット配置の説明が出ます
よくある質問
- Snowflake の起点が統一されていないのはなぜですか?
- Snowflake はビット配置(タイムスタンプを 22 ビット左シフトし、下位ビットにマシン番号とシーケンスを置く)であって標準形式ではなく、起点は各実装が独自に決めたためです。Twitter は 2010-11-04、Discord は 2015-01-01、Instagram は 2011-08-24 です。同じ数値がどの仮定でも「もっともらしい日付」になり、しかもエラーになりません。そのため本ツールは起点を明示的に選ばせ、どれを選んだかを結果に記録します。
- UUID v7 と v4 は何が違いますか?
- v4 は完全にランダムで構造を持ちません。v7 は先頭 48 ビットが Unix ミリ秒なので、生成時刻順に並びます。データベースではこれが実質的な差になります:v4 を主キーにすると B 木の挿入位置が索引全体に散らばりますが、v7 はほぼ順次書き込みになります。代償は v7 が生成時刻を漏らすことです —— それが機密なら v7 は使うべきではありません。
- UUID v1 のタイムスタンプを順に読めないのはなぜですか?
- 仕様が 60 ビットのタイムスタンプを 3 つに分け、下位 32 ビットを先頭に置いているためです:文字列は `time_low`(32 ビット)、`time_mid`(16 ビット)、そしてバージョン番号と同じ欄を共有する `time_hi`(12 ビット)の順です。順に整数として読むと完全に誤った値になりますが、もっともらしい時刻に見えるためエラーになりません。v6 はこの 3 つを上位ビット先行に並べ直すために存在します。
- ObjectId と Snowflake はどちらも時刻を持ちますが、何が違いますか?
- ObjectId は MongoDB の 12 バイト値で、先頭 4 バイトが秒、続く 5 バイトがプロセスごとの乱数、最後の 3 バイトがカウンタです —— 精度は秒です。Snowflake は 64 ビット整数で、タイムスタンプはミリ秒精度、残りのビットがマシン ID とシーケンスに分かれます。同じ秒に発行された 2 つの ObjectId は ID 自体から前後を判別できませんが、Snowflake は判別できます。
関連ツール
URL 解析
WebURL を解析し、スキーム・ホスト・ポート・パス・クエリパラメータ・アンカーに分解します。パラメータは元の値とデコード値を並記。すべてブラウザ内で処理します。
UA 解析
WebUser-Agent を解析し、ブラウザ・バージョン・OS・デバイス種別・エンジンを判定します。判定はパターン照合による概算です。すべてブラウザ内で処理します。
HTTP ステータスコード
WebHTTP ステータスコードの検索。番号から意味を、キーワードから番号を引けます。1xx〜5xx の分類・利用場面・確認のポイント付き。すべてブラウザ内で処理します。
MIME タイプ
Web拡張子から MIME タイプを、MIME タイプから既定の拡張子を検索。js なら text/javascript、image/svg+xml なら .svg が返ります。すべてブラウザ内で処理します。
.gitignore 生成
Web.gitignore 生成:言語・フレームワーク・エディタ・OS の 17 テンプレートを選び、重複を除去してテンプレートごとに注記で区切ります。ブラウザ内で処理します。
画像 Base64 変換
Web画像を Base64 / Data URL に変換。ドラッグ・選択・貼り付けに対応し、長辺での縮小と PNG/JPEG/WebP への変換ができます。ブラウザ内で処理し、送信しません。