ULID生成・解析
ULID をブラウザ内でまとめて生成します。単調増加(monotonic)にも対応し、ULID に埋め込まれた日時の解析、Crockford Base32 の検証、UUID 形式との相互変換もできます。
ページを開いた時点で5件生成しています。
ULID を解析する
ULID を入れると、埋め込まれた日時を読み取ります。
- 日時(日本時間) —
- 日時(UTC / ISO 8601) —
- Unix 時刻(ミリ秒) —
- 乱数部(16進) —
- UUID 形式 —
UUID から ULID へ
UUID を入れると ULID の表記に変換します。
- ULID —
補足
- ULID は先頭10文字が生成時刻(ミリ秒)、残り16文字が乱数の、26文字の ID です。文字列のまま並べ替えると作った順になります。
- 「単調増加」にすると、同じミリ秒の中で作った ULID も乱数部を1ずつ増やして、必ず前より大きくします。 外すと毎回乱数を引き直すため、同じミリ秒の中では順番が保証されません。
- 乱数は Web Crypto API(
crypto.getRandomValues())から取得します。 - 使う文字は Crockford の Base32(0-9 と A-Z から I L O U を除いた32文字)です。大文字・小文字は区別しません。 128ビットに収めるため、先頭の文字は 0〜7 に限られます。
- UUID との変換は128ビットの並びをそのまま書き換えるだけです。ULID から作った UUID 形式の値は、 UUID のバージョン・バリアントの決まりに従っていません。
- 生成した値や入力した値は、どこにも保存されません。
よくある質問
ULID と UUID はどう違いますか?
どちらも 128 ビットの ID ですが、ULID は先頭 48 ビットが生成時刻(ミリ秒)で、Crockford Base32 の 26 文字で書きます。文字列のまま並べ替えると作った順になるのが特徴です。UUID v4 は乱数だけで順序を持ちません。時刻順の UUID が必要なら UUID v7 も選択肢です。
「単調増加(monotonic)」にすると何が変わりますか?
同じミリ秒の中で作った ULID も、必ず前より大きくなります。仕様どおり、前回と同じミリ秒なら乱数部を 1 増やして作ります。外すと毎回乱数を引き直すため、同じミリ秒の中での順番は保証されません。
ULID から作られた日時を読み取れますか?
読み取れます。ULID を入れると先頭 10 文字の時刻を、日本時間・UTC(ISO 8601)・Unix 時刻(ミリ秒)で表示します。I・L・O・U のような ULID で使わない文字が含まれていれば、位置と打ち間違いの候補を示します。
ULID と UUID を相互に変換できますか?
できます。128 ビットの並びをそのまま書き換える変換です。ただし ULID から作った UUID 形式の値は、UUID のバージョン・バリアントの決まりに従っていません。UUID v7 を ULID に変換すると、先頭の時刻がそのまま ULID の時刻として読めます。
乱数は安全ですか? 生成した値は保存されますか?
乱数は Web Crypto API(crypto.getRandomValues())から取得しており、Math.random() は使っていません。生成した値はどこにも保存されず、ページを再読み込みすると消えます。一度に 1,000 件まで生成できます。