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 唔會離開瀏覽器。
具體步驟:
- 讀取使用者設定嘅字母表長度(m)。
- 計算所需隨機字節數(通常係 length × 4 以保證均勻分佈)。
- 用
crypto.getRandomValues攞到一個 Uint8Array。 - 將每個隨機位元組映射到字母表字符,跳過偏斜。
- 檢查有無重複(當數量 > 1 時),保證輸出嘅 ID 彼此唔同。
- 顯示結果。
因為係本地生成,試多幾個參數組合都唔使等網絡。
實際應用場景同參數選擇建議
- 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 安全字母表。