無料のナノ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は、あるものを他のすべてのものと区別できるように付けるラベルとして使う、ランダムに生成された文字列です。開発者のアンドレイ・シトニクは、コンピューティングで広く使われる36文字の識別子であるUUID(汎用一意識別子)より短い代替として、オープンソースのNano IDライブラリ(著作権表示:2017年)を書きました。このライブラリはUUIDより大きな文字セットを使うため、デフォルトのIDは36文字ではなく21文字の長さで、約42%短くなります。ライブラリ自体のデフォルトの文字セットはURLセーフセット(A-Za-z0-9_-)ですが、このツールは英数字セットをデフォルトにしています。
このツールでNano IDを生成する方法
このページのジェネレーターは、2つの設定からNano IDを作成します。
- 長さ:1から100までの整数。デフォルトは21です。
- 文字セット:IDの生成元となる文字のグループ。デフォルトは英数字です。
長さを入力し、文字セットを選んでから「生成」を押すと、IDが作られます。「コピー」を押すと、IDをコピーできます。長さまたは文字セットを変更すると、新しいIDも自動的に表示されます。
使用できる文字セット
このツールには、固定の文字セットが七つあります。ユーザーが入力する独自の文字セットは使えません。
| 文字セット | 使用する文字 | 文字セットのサイズ |
|---|---|---|
| 英数字(デフォルト) | 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と一般的な句読点 | 88 |
英数字セットがデフォルトで選択されています。URLセーフセットで使われるハイフンとアンダースコアは含まれませんが、文字と数字だけなら、URLに直接配置しても安全です。
Nano IDの計算式
Nano IDは、暗号論的に安全な乱数生成器を使い、文字セットから決まった数の文字を一つずつランダムに選んで作られます。これは、出力を事前に予測できないように設計された生成器です。ブラウザーでは、このツールが使うライブラリは、暗号的に強い乱数値を返すWeb Cryptoのメソッドcrypto.getRandomValues()からランダムなバイトを取得します。
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千兆個のIDを生成する必要があります。毎秒百万個のIDを生成しても、その数に達するまで約29,700年かかります。
64文字のURLセーフアルファベットに切り替えると、同じ1%のリスクに達するID数は約1.3 × 10^18個へとわずかに増えます。アルファベットが大きいほど、選択可能なIDが増えるためです。
Nano IDと他の識別子の比較
ULIDは26文字の文字列で表記され、作成時刻順に並びます。KSUIDのテキスト形式は常に27文字で、タイムスタンプ順に並びます。
| 種類 | 長さ | 備考 |
|---|---|---|
| Nano ID | 21文字、調整可能 | ランダムでコンパクトだが、時刻順には並べられない |
| UUID | 36文字 | 標準形式で広くサポートされているが、ハイフンを含む |
| ULID | 26文字 | 作成時刻順に並べ替え可能 |
| KSUID | 27文字 | 作成時刻順に並べられ、タイムスタンプを含む |
| 自動増分整数 | 可変 | 単純で連続的だが、予測しやすく、別々のデータベース間で調整しにくい |
よくある質問
デフォルトのNano IDの長さと文字セットは?
デフォルトは、英数字セット(A-Z、a-z、0-9)から選ばれた21文字で、合計62文字です。
このツールはカスタムアルファベットに対応していますか?
いいえ。固定の文字セットが七つあります。英数字、URLセーフ、数字、英字、小文字、大文字、記号です。
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を生成できます。
参考文献
- アンドレイ・シトニク。Nano ID license file。GitHub上のai/nanoid LICENSE — MITライセンス、"Copyright 2017 Andrey Sitnik"。
- アンドレイ・シトニク。Nano ID README。GitHub上のai/nanoid — UUIDより大きな文字セット(
A-Za-z0-9_-)、"ID size was reduced from 36 to 21 symbols"。ブラウザーではWeb Crypto APIを使用。 - MDN Web Docs。Crypto: getRandomValues() method。MDN, Crypto.getRandomValues() — このメソッドは暗号的に強い乱数値を返します。
- ULIDプロジェクト。Universally Unique Lexicographically Sortable Identifier。GitHub上のulid/spec — 正式には26文字の文字列で、36文字のUUIDとは異なり、辞書式順序で並べ替え可能。
- Segment。KSUID。GitHub上のsegmentio/ksuid — テキスト表現は常に27文字で、タイムスタンプ順に並びます。