本文へスキップ

ULID・NanoID生成

ULID & NanoID Generator

並べ替えのきくULIDや短いNanoIDを、使う文字と長さを決めて作り、衝突の確率も示します。

ULIDとNanoIDを作ります。36文字のUUIDがURLに入れるには長すぎるとき、みなが手を伸ばす2つの短いid形式です。選んだ長さとアルファベットに対する衝突の計算も一緒に出します。そのidが十分に短いのか、短すぎるのかを決めるのはその数字です。

🔒 ブラウザの中だけで動きますulidnanoidgeneratorid
種類

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を外してあるので、声に出して読んでも取り違えません。

    使い方

    1. ULIDとNanoIDのどちらかを選びます

      ULIDは26文字の固定長で、先頭の10文字にミリ秒のタイムスタンプが入るので並べ替えがききます。NanoIDは長さもアルファベットも自由で、全体がエントロピーです。順序という考え方がありません。

    2. 長さとアルファベットを決めます

      NanoIDの既定は64種類の記号で21文字です。短くしたり、アルファベットを狭めたり——たとえば人が声に出して読むものなら、紛らわしい文字を抜いた集合——すればエントロピーを失い、下のパネルがどれだけ失うかを正確に示します。

    3. 衝突の行を読みます

      衝突が1つでも起きる確率が1%になるまでのidの個数と、1日に1000個作るペースならそれがどれだけの期間にあたるかを示します。エントロピーが64ビットを下回るときは、その旨を書きます。URLのスラッグと、推測されてはいけない値の境目がそこだからです。

    4. 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文字を要するのはそのためです。

    ここから渡せます

    次の一手

    このツールが出したものをそのまま受け取れる道具です。