無料のナノID生成器 - セキュアでURL安全な一意の識別子をオンラインで
ランダムなNano IDをブラウザ上で生成する無料ツール。生成する文字数と使用する文字集合を自由に指定するだけで、UUIDより短くURLに安全なコンパクトな一意の識別子をまとめて作成でき、データベースの主キー、APIトークン、セッションIDの発行などにも利用できます。
生成される Nano ID の長さ(1〜100文字)
Nano ID の文字セットを選択
生成された Nano ID
可視化
ドキュメンテーション
Nano IDジェネレーターは、Nano IDと呼ばれる短くランダムな文字列を作成します。Nano IDは、データベースレコード、URL、APIトークンなどの一意の識別子として機能し、生成された2つのIDが一致する可能性は極めて低いものです。
Nano IDとは?
Nano IDは、何かを他のすべてのものと区別できるようにラベル付けする、ランダムに生成された文字列です。ソフトウェア開発者のAndrey Sitnikは、UUID(Universally Unique Identifier)のより小さな代替として、2017年にこの形式を作成しました。UUIDはコンピューティングで広く使われる36文字の識別子です。デフォルトのNano IDは21文字で、UUIDの36文字と比べて約42%短くなっています。
このツールでNano IDを生成する方法
このページのジェネレーターは、2つの設定からNano IDを作成します。
- 長さ:1から100までの整数。デフォルトは21です。
- 文字セット:IDの生成元となる文字のグループ。デフォルトは英数字です。
長さを入力し、文字セットを選んでから「Generate」を押すと、IDが作成されます。「Copy」を押すとコピーでき、「Reset」を押すと長さ21と英数字セットに戻ります。長さまたは文字セットを変更すると、新しいIDも自動的に表示されます。ボタンの下には、IDの各文字が色付きのブロックで表示されます。大文字は青色、小文字は緑色、数字はオレンジ色、記号は灰色のブロックとして表示されます。
長さが1から100までの整数でない場合、ツールは「長さは1から100までの整数でなければなりません」というメッセージを表示し、IDを生成しません。
使用できる文字セット
このツールでは、7種類の固定文字セットを使用できます。ユーザーが入力したカスタムアルファベットには対応していません。「With Symbols」セットは、次の26個の記号を英数字に追加します:! @ # $ % ^ & * ( ) _ + - = [ ] { } | ; : , . < > ?です。
| 文字セット | 使用される文字 | アルファベットのサイズ |
|---|---|---|
| 英数字(デフォルト) | A-Z、a-z、0–9 | 62 |
| URLセーフ | A-Z、a-z、0-9、-、_ | 64 |
| 数字 | 0–9 | 10 |
| アルファベット | A-Z、a-z | 52 |
| 小文字 | a-z | 26 |
| 大文字 | A-Z | 26 |
| 記号付き | A-Z、a-z、0–9、および26個の記号 | 88 |
英数字セットがデフォルトで選択されています。URLセーフセットで使われるハイフンとアンダースコアは含まれませんが、文字と数字だけなら、URLに直接配置しても安全です。
Nano IDの計算式
Nano IDは、暗号学的に安全な乱数生成器を使い、アルファベットから一定数の文字を1文字ずつランダムに選んで作成されます。これは、出力を事前に予測できないように設計された生成器です。
1id = random(alphabet, size)
2デフォルト設定では、alphabetの文字数は62で、sizeは21です。
計算例
デフォルトの英数字アルファベットと長さ21を使った場合、生成されるIDの例は次のとおりです。
1K7pQ2mZxT9vY4nR8jH3wL
2各文字は62個の英字と数字から独立して選ばれるため、ジェネレーターを2回実行して同じ文字列が生成されることはほとんどありません。
衝突確率の計算方法
Nano IDはランダムに選ばれるため、可能性は非常に低いものの、生成された2つのIDが一致することがあります。これを衝突と呼びます。k個のIDを生成した後に少なくとも1回衝突する確率は、「誕生日問題」と同じ数学に従います。
1P(collision) ≈ 1 - e^(-k² / (2n))
2ここでnは、生成可能なIDの数です。これはアルファベットのサイズをIDの長さで累乗した値、つまりn = alphabet_size^lengthです。
計算例
デフォルト設定で、62文字のアルファベットと21文字の長さを使用する場合:
1n = 62^21 ≈ 4.4 × 10^37 possible IDs
2衝突確率1%になるように式を解くと、次のようになります。
1k ≈ 9.4 × 10^17 IDs
2つまり、2つのIDが一致する確率が1%に達するまでに、約940×10^15個のIDを生成する必要があります。毎秒百万個のIDを生成しても、その数に達するまで約29,700年かかります。
64文字のURLセーフアルファベットに切り替えると、同じ1%のリスクに達するID数は約1.3 × 10^18個へとわずかに増えます。アルファベットが大きいほど、選択可能なIDが増えるためです。
Nano IDと他の識別子の比較
| 種類 | 長さ | 注記 |
|---|---|---|
| Nano ID | 21文字、調整可能 | ランダムでコンパクトだが、時刻順には並べられない |
| UUID | 36文字 | 標準形式で広くサポートされているが、ハイフンを含む |
| ULID | 26文字 | 作成時刻順に並べ替え可能 |
| KSUID | 27文字 | 作成時刻順に並べられ、タイムスタンプを含む |
| 自動インクリメント整数 | 場合によって異なる | 単純で連続的だが、予測しやすく、別々のデータベース間で調整しにくい |
よくある質問
デフォルトのNano IDの長さと文字セットは?
デフォルトは、英数字セット(A-Z、a-z、0-9)から選ばれた21文字で、合計62文字です。
このツールはカスタムアルファベットに対応していますか?
いいえ。英数字、URLセーフ、数字、アルファベット、小文字、大文字、「With Symbols」の7種類の固定文字セットを使用できます。
Nano IDはUUIDとどう違いますか?
Nano IDのほうが短い点です。デフォルトは21文字で、UUIDの36文字より約42%短くなっています。どちらもランダムに生成され、連続した値ではありません。
Nano IDを作成時刻順に並べることはできますか?
いいえ。Nano IDは完全にランダムなので、いつ生成されたかを示す情報を持ちません。ULIDやKSUIDなどの形式は、時刻順に並べられるよう設計されています。
Nano IDをデータベースの主キーとして安全に使用できますか?
はい。数値ではなくテキストまたは文字列型の列に保存し、高速な検索のために一意インデックスを設定します。
生成可能なNano IDはいくつありますか?
選択した長さと文字セットによって異なります。デフォルトの62文字のアルファベットと21文字の長さでは、62^21個、約4.4 × 10^37個のIDを生成できます。
参考文献
- Sitnik, Andrey. "Nano ID." GitHub、https://github.com/ai/nanoid.
- "Universally unique identifier." Wikipedia、Wikimedia Foundation、https://en.wikipedia.org/wiki/Universally_unique_identifier.
- "ULID Spec." GitHub、https://github.com/ulid/spec.