NanoID 產生器

線上產生 NanoID:預設 21 個 URL-safe 字元,約 126 位元隨機性,可自訂長度和字母表。

格式
產生結果
就緒,可在瀏覽器裡產生 NanoID。

這個 ID 的結構

結構
預設 21 個 URL-safe 字元,來自 A-Z、a-z、0-9、底線和連字號。
預設 64 字元字母表、21 字元長度下約 126 位元。
時間
不含時間戳;除非你把含義放進自訂字母表,否則 NanoID 是不透明的。
碰撞風險
碰撞風險隨長度和字母表變化。預設設定與 UUID v4 處在相近的實用安全區間。
範例
EpYFXU6SyFhpLh2w_sRfe

你的 ID 會用瀏覽器裡的強隨機來源在本地產生,不會傳送到 BroBroGo。

常見問題

為什麼用 NanoID?

NanoID 比 UUID 短,預設 URL-safe,在保留預設長度和字母表時仍有很高隨機性。

可以改字母表嗎?

可以。鎖定的 NanoID 頁面保留長度和字母表控制項。字母表更小或長度更短,碰撞風險會升高。

Nano ID 產生器:長度、字母表與碰撞抵抗的完整控制

這個頁面提供了一個純客戶端的 Nano ID 產生工具。與固定長度 36 字元的 UUID 或 26 字元的 ULID 不同,Nano ID 的預設長度為 21 個字元,卻能提供可比的碰撞抵抗能力。更關鍵的是,您可以自由調整長度(2 到 36)與允許使用的字母表(至少需包含兩個不同字元),以符合嚴格的格式限制或最佳化儲存效率。所有 ID 均在瀏覽器內透過 crypto.getRandomValues 生成,絕不會傳送到 BroBroGo 或任何伺服器。

為何長度與字母表可以調整?

Nano ID 的設計核心是「可自訂性」。預設的 21 字元使用 URL 安全字母表(A-Za-z0-9_-,共 64 個字元),這個組合在碰撞機率與長度之間取得平衡。但實際應用可能需要更短的 ID(例如 QR 碼空間有限),或者需要排除容易混淆的字元(如 0OIl)。透過調整長度與字母表,您可以控制:

  • 碰撞機率:長度越長、字母表越大,碰撞機率越低。公式近似 (字母表大小^長度) / (ID總數)^2 * 100%。例如 21 字元、64 字元字母表,產出 100 萬個 ID 時碰撞機率約為十億分之一。
  • 儲存與傳輸開銷:較短的 ID 減少資料庫欄位長度,也利於 URL 或 API 回應縮小。
  • 格式相容性:某些系統只接受純數字或特定大小寫,您可以將字母表設為 0123456789ABCDEF

每次修改長度、字母表或數量後,工具會立即重新產生 ID,並顯示新結果。目前狀態顯示「Ready.」表示閒置,產生後變為「Generated.」,複製全部後則顯示「Copied all!」。

與 UUID、ULID 的具體比較

格式 預設長度 字元集 碰撞抵抗 可調整性
UUID (v4) 36 (含連字號) 十六進位 (0-9a-f) 極高(122 位元隨機)
ULID 26 Crockford 32 (0-9 A-Z 不含 ILOU) 高(128 位元,含時間戳) 有限
Nano ID 21 (可調 2-36) URL 安全 64 字元 (可自訂) 可調整 完全

Nano ID 的優勢在於:您可以在保持可接受碰撞機率的前提下,將長度壓到比 UUID 短 42%。若將長度設為 12 字元、使用全部 64 字元,其碰撞機率仍遠低於常見的亂數產生器。但請注意,當長度縮短或字母表字元數減少時,碰撞風險會急遽上升。工具會強制字母表至少包含兩個不同字元;若輸入單一字元,結果會被清空,ID 計數顯示 0,且「Copy all」按鈕停用。

邊界情況與操作規則

  • 長度範圍:2 到 36。低於 2 無意義;超過 36 會使 ID 過長,但工具上限為 36。
  • 字母表驗證:必須包含至少兩個不同字元。如果您只想用數字,請輸入 0123456789(10 個不同字元)。若誤刪成只剩一個字元,例如只留 a,則所有 ID 消失,計數歸零。
  • 數量:每次產生 1 到 100 個 ID。點擊單個 ID 可複製到剪貼簿。
  • 格式下拉選單:目前固定為 Nano ID,未實作其他格式,但保留了擴充空間。
  • 即時再生:任何選項變動(包含切換格式,若未來有其他格式)都會重新執行生成。

這些規則防止了無效輸入導致無限迴圈或未定義行為。例如,長度設 2 但字母表僅 2 字元時,可產生 4 種組合;若數量要求 100 個,則無法產生唯一 ID?但工具目前並未保證 ID 唯一性(若同一組參數產生碰撞風險),僅使用隨機取樣。實務上,若 字母表大小^長度 小於要求的數量,仍會強制產生指定數量的 ID,但碰撞機率極高。使用者應自行注意此極端情況。

瀏覽器端生成的隱私與安全

所有隨機性來自 crypto.getRandomValues(),這是瀏覽器提供的加密安全亂數,適用於生成 token、session ID 等敏感用途。與伺服端生成相比,客戶端生成有以下優點:

  • 零網路傳輸:您輸入的參數與產生的 ID 不會離開本機。
  • 無資料留存:工具不會記錄任何歷史。
  • 離線可用:頁面資源載入後,即使斷網仍可正常產出。

這對於處理機密資料(如 API 金鑰、一次性驗證碼)的開發者特別重要。您可以確定沒有任何第三方伺服器能窺見所產生的 ID。

實際應用場景建議

  1. 資料庫主鍵:取代自動遞增整數或 UUID。21 字元的 Nano ID 比 UUID 短 15 個字元,可減少索引大小,尤其在高併發寫入時有優勢。
  2. 短網址:將字母表限制為大寫字母與數字(36 字元),長度設 6 可產生約 21 億個不重複 ID。若每日僅產生數萬個,碰撞風險極低。
  3. 唯一交易序號:使用字母與數字混合,長度 12 即可滿足大部分商業應用。
  4. QR 碼內容:短 ID 能降低 QR 碼的密度,提高掃描成功率。可進一步調整字母表避開 %# 等在 URL 中需轉義的字元。

常見問題 FAQ

Q: Nano ID 預設長度為何是 21?
A: 21 字元搭配 64 字元字母表時,每 ID 包含 21 × log₂64 = 126 位元隨機性,接近 UUID v4 的 122 位元,碰撞機率相當,但長度減少 42%。

Q: 我可以完全自訂字母表嗎?可以包含中文字元嗎?
A: 可以。字母表是任意文字字串,但必須至少含兩個不同字元。中文字元(如「中文」)也可使用,但會大幅增加字元數(Unicode BMP 區約 2 萬字),且生成的 ID 不再是 URL 安全。一般建議維持 ASCII 可列印字元以利傳輸。

Q: 如果我把長度設為 2、字母表設為「ab」,會發生什麼?
A: 每次取樣會從 ab 中隨機選 2 次,產生如 aaabbabb 等結果。因僅 4 種可能,如果數量超過 4,必定出現重複 ID。工具不強制唯一性,但您可透過增加長度或擴大字母表來降低碰撞。

Q: 如何估算所需的最小長度?
A: 可使用公式:最小長度 ≈ log(總預估 ID 數量) / log(字母表大小) + 幾個備用位元。例如預計產生 1000 萬個 ID、使用 64 字元字母表,長度 5 的組合數為 64⁵ ≈ 10.7 億,理論碰撞機率約萬分之一。若要小於十億分之一,建議長度 7 以上。

Q: 「Copy all」按鈕何時會停用?
A: 當字母表僅包含一個字元時,結果清空、ID 計數為 0,此時「Copy all」按鈕禁用。恢復為至少兩個不同字元的字母表後即重新啟用。

Q: 這個工具會將產生的 ID 儲存在伺服器嗎?
A: 不會。所有計算在瀏覽器 JavaScript 引擎中完成,無任何資料傳輸。您可以關閉網路後仍然正常使用。