識別子

Nano ID生成CUID・CUID2・KSUIDにも対応

新しいIDをまとめて生成するか、CUIDとKSUIDの読み取れる項目を確認します。

Nano ID生成

入力

下でアルゴリズムと条件を選んでください。実行するたびに新しい一括結果を生成します。設定を変えただけでは、以前の結果が未更新になるだけです。

処理はこのブラウザー内で完結し、入力をサーバーへ送信しません。

結果

設定

1回1〜1,000件。NanoIDは1〜128文字、CUID2は2〜32文字。カスタム文字セットは重複しない表示可能なASCII文字2〜64個で、空白は使えません。デコードは128,000文字、1,000件まで。

条件を選んで実行してください。

短いIDが必要なテストデータやURLを用意するとき、Nano ID生成なら文字数と使用文字を確かめながら形式を選べます。まず保存先や外部システムが要求する形式を確認してください。

NanoIDは文字セットを調整でき、CUID2は内部情報をハッシュにまとめます。旧CUIDには読み取れるフィールドがあり、KSUIDには秒単位の時刻が含まれます。同じ長さでも構造は同じではありません。

Nano ID生成を使う理由

長さの設定を形式に合わせる

Nano ID生成は四つのアルゴリズムを一つの画面で扱い、それぞれで使える設定だけを表示します。NanoIDは短縮できますが、KSUIDは27文字を保たないと元の形式として読み取れません。

長さを変えられる乱数列、旧形式の分割フィールド、不透明なハッシュ、時刻と乱数という四つの異なる識別子。

存在する項目だけを読み取る

CUIDとKSUIDでは、時刻や乱数部分をレポートで確認できます。NanoIDやCUID2から作成時刻を推測して表示することはありません。読み取れる時刻も、実際の発生日時の証明にはなりません。

構造のある識別子から時計とランダムな部分が分かれ、隣には時刻を復元できない不透明な識別子がある。

短くする前に確かめること

01

保存先の要件を先に決める

初期値はNanoIDがURL向けの21文字、CUID2が24文字です。カスタムアルファベットを使えるのはNanoIDだけです。同じ文字を複数入れると、重み付けではなくエラーになります。

  • 条件を一つでも変えると以前の結果は未更新になり、再実行するまで出力できません。
02

発行数と今回の件数を分ける

衝突確率には想定する総発行数を使います。KSUIDでは同じ秒に発行する最大件数を入力してください。旧CUIDに一様な文字列の確率をそのまま当てはめることはしません。

  • Ctrl/Cmd+Enterで実行できます。デコードだけは入力が350ms止まると自動更新できます。
03

全件が正しいことを確認する

最初は50件を表示し、100件ずつ追加できます。コピーと保存は表示件数にかかわらず全件を対象にします。デコードは空行以外に一つでも不正な行があれば全体をエラーにします。

  • サンプルとクリアは確認してから適用し、元に戻すと入力・設定・結果をまとめて復元します。

形式ごとの構造と設定

文字セットを選べるNanoID

URL向け、16進数、数字、カスタムから選べます。公式の棄却法を使うため、文字数が2のべき乗でない場合も単純な剰余演算による偏りを避けます。

内部情報を隠すCUID2

時刻、ソルト、カウンター、セッション指紋をSHA3-512で混ぜ、小文字から始まる文字列にします。長さは2〜32文字に変えられますが、文字セットと内部フィールドは編集できません。

旧CUIDとの互換性

c、Base36のミリ秒、4文字のカウンター、4文字の指紋欄、8文字の乱数という構成です。この実装の指紋欄にはブラウザーの属性ではなくランダムなセッション識別子を入れます。

KSUIDの時刻とペイロード

20バイトを大文字小文字を区別する27文字のBase62に変換します。先頭4バイトはUnix 1400000000からの秒数、残り16バイトは乱数です。UTCと16進ペイロードを確認できます。

結果の意味と対応範囲

確率は一意性の検査ではない
誕生日問題の式は独立した抽出における重複の近似です。CUID2は理想空間を仮定し、KSUIDは同じ秒の範囲で計算します。データベースの一意制約を省かないでください。重複結果を隠すための再抽選もしません。
時刻の精度と境界
CUIDの時刻部分は可変長で、末尾の固定16文字から境界を求めます。KSUIDは秒精度のため同じ秒での順序は保証せず、時計が戻る場合も単調増加とは限りません。NilとMaxは特別な境界値としてマークします。
入力を勝手に直さない
空行以外をトリミング、修復、並べ替え、重複排除しません。文字セットの重なりからアルゴリズムは断定できないため、CUIDかKSUIDを選んでください。NanoIDとCUID2の時刻デコードには対応しません。
文字と件数の上限
一括生成は1〜1,000件。NanoIDは1〜128文字で、重複しない表示可能なASCII文字2〜64個を使います。CUID2は2〜32文字です。Unicode文字セット、空白、重み、接頭辞、任意の区切り、KSUIDの時刻編集は扱いません。
旧形式と外部連携
旧CUIDは非推奨で、互換性の確認用です。IDをパスワードや認可の代わりにはできません。ファイル読込、URL取得、データベース接続、API呼出し、弱い乱数への代替は行いません。UUID・ULID・Snowflakeは別のツールです。

Nano ID生成のよくある質問

Nano IDとUUIDはどちらを使うべきですか?

外部仕様や列の型がUUIDを要求するなら、その形式を守ってください。短いURL向けの文字列や独自の文字セットが必要な場合はNanoIDを検討できます。デフォルトの21文字は126ビットの理想空間を持ちます。

生成したIDが重複することはありますか?

有限のランダムな空間なので、重複する可能性はあります。確率の表示はゼロ件の重複を保証しません。総発行数を見積もり、保存時の一意制約と衝突時の処理を用意してください。

文字種を数字のみにすると安全性は下がりますか?

同じ長さなら組み合わせが減ります。例えば6桁の数字は100万通りだけです。64文字を使う場合と同じ衝突確率を保ちたいなら、長さを増やす必要があります。

カスタムアルファベットは使えますか?

NanoIDモードでカスタム文字セットを選ぶと、表示可能なASCII文字を2〜64個指定できます。重複文字や空白、対応外の文字があればエラーにします。ほかのアルゴリズムの文字セットは固定です。

Nano IDのサイズはどのくらいにすべきですか?

特別な制約がなければ21文字から始め、実際の発行数を入れて比較してください。短いIDを使う場合は、見た目の読みやすさだけでなく、利用期間や同時に有効な件数も考慮します。

想定と違う結果が出ましたか?

Nano ID生成を開く

Nano ID生成で形式と衝突モデルを確認し、アプリケーションに合う条件が決まったら新しい結果を生成して保存してください。