NanoID 產生器

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

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

這個 ID 的結構

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

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

常見問題

為什麼用 NanoID?

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

可以改字母表嗎?

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

Nano ID 生成工具:可自訂長度與字母表嘅 URL 安全唯一標識符

呢個工具響瀏覽器本地產生 Nano ID 格式嘅唯一標識符。Nano ID 嘅預設長度係 21 個字符,比 UUID 嘅 36 個字符短,但依然保持相近嘅抗碰撞能力。使用者可以任意調整兩個關鍵參數:長度(2 至 36 之間)同埋字母表(需要至少 2 個唔同字符)。任何改動都會即刻重新產生 ID,而且所有 ID 只使用 URL 安全字符,唔含空格或特殊符號。

點解呢個工具同其他 UUID/ULID 生成器唔同?

市面上常見嘅唯一 ID 格式(UUID v4 固定 36 字符、ULID 固定 26 字符)全部唔畀改長度或者字母表。Nano ID 嘅核心優勢就係靈活性:你可以根據實際應用需要,同時控制 ID 嘅長度同字符組合。例如,如果你只需要幾百萬個 ID 而碰撞風險可以接受,你可以用 8 個數字字符(0-9),令 ID 極短;如果你需要極高抗碰撞性,可以用 36 個字符兼用成個 URL 安全字母表。呢個工具將呢種靈活性直接用 slider 同文字框呈現,所見即所得。

參數範圍同邊界情況

長度 slider:預設 21,範圍 2 至 36。滑動時即時生效。

字母表文字框:預設係 URL 安全字符(A-Z、a-z、0-9、-、_)。使用者可以任意編輯,例如只保留數字 0123456789,或者加入 !@# 等符號。但必須包含至少 2 個唔同字符。當字母表被縮減到得返單一字符時(例如全部係 a),工具會:

  • 清除已顯示嘅 ID 結果
  • ID 數量顯示為 0
  • 停用「全部複製」按鈕
  • 顯示錯誤訊息:「Alphabet needs at least 2 different characters.」

呢個設計係因為如果字母表只有一個字符,無論生成咩長度嘅 ID,結果都係一串重複嘅字符,根本無唯一性可言。工具直接攔截呢個情況,避免誤導。

數量:可以設定 1 至 100 個 ID,同樣係即時生成。

碰撞機率:長度、字母表大小同安全邊際

Nano ID 嘅碰撞阻力可以用公式估算:碰撞機率 ≈ (n²) / (2 × L),其中 n 係已生成 ID 數量,L 係總可能組合數(字母表大小^長度)。以預設值為例:字母表 64 個字符(A-Z a-z 0-9 - _),長度 21,總組合數係 64²¹,大約 2.5 × 10³⁷。呢個級數遠超 UUID v4 嘅 2¹²²(約 5.3 × 10³⁶),所以預設情況下 Nano ID 比 UUID 更難撞到,而且字符少咗 15 個。

舉個實際例子:如果你想用 ID 做短連結,長度 10、字母表用 62 個大小寫字母加數字,總組合數係 62¹⁰ ≈ 8.4 × 10¹⁷。假設你預計會產生 10 億個 ID(n = 10⁹),碰撞機率大約 (10⁹)² / (2 × 8.4 × 10¹⁷) ≈ 1 / 1.68 ≈ 0.6。呢個機率太高,你需要加長長度或者用更大字母表。工具可以即刻改長度睇到結果變化,幫你快速試錯。

同 UUID 嘅對比:UUID 固定 36 字符(連分隔符),實際隨機部分 122 bit。Nano ID 預設 21 字符用 64 字符字母表相當於 21 × log₂64 = 126 bit,稍多。所以預設嘅 Nano ID 比 UUID 短約 42%,同時有更高嘅熵。

生成機制:瀏覽器原生隨機數,零伺服器傳輸

所有 ID 都係用 crypto.getRandomValues() 生成,呢個係現代瀏覽器提供嘅強加密偽隨機數產生器。工具唔會將任何輸入(字母表、長度、數量)傳去 BroBroGo 伺服器,所有運算都喺你部機完成。對於私隱敏感用途(例如生成 API token、一次性優惠碼),呢點好重要——你嘅 ID 唔會離開瀏覽器。

具體步驟:

  1. 讀取使用者設定嘅字母表長度(m)。
  2. 計算所需隨機字節數(通常係 length × 4 以保證均勻分佈)。
  3. crypto.getRandomValues 攞到一個 Uint8Array。
  4. 將每個隨機位元組映射到字母表字符,跳過偏斜。
  5. 檢查有無重複(當數量 > 1 時),保證輸出嘅 ID 彼此唔同。
  6. 顯示結果。

因為係本地生成,試多幾個參數組合都唔使等網絡。

實際應用場景同參數選擇建議

  • Web API 資源 ID:Nano ID 預設值(21 字符)已經適合,可以直接用。如果想節省頻寬,可以試 16 字符(同 UUID 嘅隨機 part 長度接近)。
  • QR Code 內容:QR Code 容量有限,短 ID 好有用。例如用 8 個數字字母(62 字符字母表,8 字符長)已經夠細。但要注意:QR Code 要容錯編碼,短 ID 可以放更多資料。
  • 數據庫主鍵:如果你用自動遞增整數但擔心暴露順序,可以用 Nano ID 代替。但留意:Nano ID 長度同字母表會影響索引效率。建議字母表只用大小寫字母數字(無符號),長度 10 以上。
  • 短連結服務:常見做法係用 7 個 base62 字符(約 3.5 萬億組合),但如果你預期用量大,最好用 8 或 9 字符。呢個工具可以即刻計到幾多組合。
  • 一次性令牌:要求不可預測性同高熵,保持預設長度 21 同 URL 安全字母表已經足夠。

FAQ

Q:點解預設長度係 21 而唔係 20 或 22?
A:Nano ID 原作者經過計算,21 字符用 64 字符字母表可以提供 126 bit 熵,超過 UUID 嘅 122 bit,同時保持整數長度。呢個值係安全同效能嘅平衡點。

Q:字母表可以只放數字 0-9 嗎?可以只放一個字符嗎?
A:可以只放數字。但若字母表少於 2 個唔同字符,工具會清空結果並顯示錯誤。單字符字母表無法產生唯一 ID,因為無論點排都係重複字符。

Q:碰撞機率點樣估算?
A:用公式 碰撞機率 ≈ n² / (2 × A^L),其中 n 係 ID 數目,A 係字母表大小,L 係長度。實際應用可以用網上嘅碰撞機率計算器,或者直接長啲就已夠安全。

Q:同 UUID v4 比較,邊個更好?
A:UUID v4 係標準(RFC 4122),兼容性高,但長度 36 字符,有連字符。Nano ID 短、可自訂、URL-safe、無連字符,適合現代 API 同儲存。兩者隨機強度相若(UUID 122 bit,Nano ID 預設 126 bit)。如果你需要標準兼容,用 UUID;如果要靈活同短,用 Nano ID。

Q:Copy all 按鈕幾時會失效?
A:當字母表少於 2 個唔同字符、或者因為邊界情況導致 ID 數量變成 0 時,「全部複製」按鈕會停用。正常情況下只要有至少 1 個 ID 就會啟用。

Q:生成嘅 ID 係咪真係隨機?可唔可以用嚟做安全 Token?
A:係。源於瀏覽器嘅 crypto.getRandomValues 係密碼學安全嘅偽隨機數生成器。可以用嚟做 session token、API key、一次性密碼等安全用途。但要注意:長度同字母表唔夠大時(例如只 4 個數字),係好易撞到,唔適合安全用途。建議至少用 16 字符加完整 URL 安全字母表。