ULID・NanoID生成
ULID & NanoID Generator
並べ替えのきくULIDや短いNanoIDを、使う文字と長さを決めて作り、衝突の確率も示します。
ULIDとNanoIDを作ります。36文字のUUIDがURLに入れるには長すぎるとき、みなが手を伸ばす2つの短いid形式です。選んだ長さとアルファベットに対する衝突の計算も一緒に出します。そのidが十分に短いのか、短すぎるのかを決めるのはその数字です。
26文字、並び替え可能。先頭10文字にミリ秒のタイムスタンプが入っています。
id 0個
衝突する確率はどれくらいか
エントロピー
80.0ビット
確率1%までの個数
1.56e11
毎時1,000個のとき
18千年
誕生日の限界: P ≈ 1 − exp(−n²/2N)。下の数字は、それが1パーセントに達する地点です。
ULIDの中身を見る
ULIDはULID仕様に従います。ミリ秒のタイムスタンプ48ビットのあとに乱数80ビットを、Crockford base32で書きます。I・L・O・Uを外してあるので、声に出して読んでも取り違えません。
使い方
ULIDとNanoIDのどちらかを選びます
ULIDは26文字の固定長で、先頭の10文字にミリ秒のタイムスタンプが入るので並べ替えがききます。NanoIDは長さもアルファベットも自由で、全体がエントロピーです。順序という考え方がありません。
長さとアルファベットを決めます
NanoIDの既定は64種類の記号で21文字です。短くしたり、アルファベットを狭めたり——たとえば人が声に出して読むものなら、紛らわしい文字を抜いた集合——すればエントロピーを失い、下のパネルがどれだけ失うかを正確に示します。
衝突の行を読みます
衝突が1つでも起きる確率が1%になるまでのidの個数と、1日に1000個作るペースならそれがどれだけの期間にあたるかを示します。エントロピーが64ビットを下回るときは、その旨を書きます。URLのスラッグと、推測されてはいけない値の境目がそこだからです。
ULIDが手元にあれば読み解きます
貼り付けると、生成された時刻と後ろの乱数部分を表示します。そのレコードが実際にいつ作られたのかを割り出すのに使えます。
よくある質問
短いidを秘密のリンクに使っても大丈夫ですか
エントロピーが大丈夫だと言っているときだけです。21文字のNanoIDはおよそ126ビットあるので問題ありません。10文字のものは60ビット前後で、お金をかける気のある相手には推測されます。64ビットを下回るものに印を付けるのは、まさにこのためです。短いidは短いidであって、秘密ではありません。
アルファベットを自分で指定しても、出方が均等になるのはなぜですか
記号を`random % length`ではなく棄却サンプリングで引いているからです。剰余で縮める近道は、長さが256を割り切らないアルファベットをすべて偏らせます。自作のid生成器でよくあるバグで、誰かが数えてみるまで見えません。
ULIDの単調増加は何をするものですか
同じ1ミリ秒のあいだに作った素のULIDは、互いの順序がばらばらです。単調増加のモードは乱数のフィールドを引き直すのではなく1ずつ増やすので、同じミリ秒にまとめて作ったものも作った順に並びます。
ULIDのbase32がI・L・O・Uを外しているのはなぜですか
Crockfordのアルファベットだからです。人がidを声に出して読んだり、画面から書き写したりするときに取り違える文字を落としてあります。代償は記号が36個ではなく32個になることで、NanoIDが21文字で済むところにULIDが26文字を要するのはそのためです。
ここから渡せます
次の一手
このツールが出したものをそのまま受け取れる道具です。
パスワード生成
Password Generator
長さ・使う文字種・紛らわしい文字を除く規則を決めて、必要な本数だけランダムなパスワードを作ります。
ランダムキー生成
Random Key Generator
暗号学的な乱数バイトを指定した長さで16進・Base64・Base64URLとして生成し、アプリのシークレットに使えるようにします。
UUID生成
UUID Generator
UUIDのv1・v4・v5・v7をまとめて作り、v1やv7に埋まっている時刻を取り出します。
Base64エンコード・デコード
Base64 Encoder & Decoder
テキストでもファイルでもBase64とBase64URLを符号化・復号し、UTF-8も正しく扱います。
curlをコードに変換
curl to Code
curlのコマンドをfetch・axios・Pythonのrequests・Go・PHP・PowerShellのコードに変換します。
文字列のハッシュ
Text Hash
文字列のMD5・SHA-1・SHA-256・SHA-384・SHA-512・CRC-32を計算し、大文字表記とBase64での出力も選べます。