在此線上產生的 Nano ID 是 URL 安全的隨機字串,長度介於 1 至 128 個字元,取自官方 Nano ID 的 64 個符號字母表,並使用瀏覽器的密碼學隨機來源產生,且絕不會傳送到伺服器。
「nano id online」這個詞涵蓋兩項相關需求:隨時產生識別碼,以及知道該值的來源。Nano ID 產生器在單一頁面中就能處理兩者。您可以設定長度與數量、產生一批識別碼,並複製以換行分隔且會保留在目前分頁中的 ID。它不會做的,是將識別碼轉換成身分驗證、憑證或密祕。

產生器會設定並傳回什麼
頁面上的每個控制項都對應一組固定的選項,因此您可以在產生任何內容之前預測輸出結果的形式。
| 控制項或輸出 | 支援的值 | 重要性 |
|---|---|---|
| ID 長度 | 1 至 128 個字元(預設為 21) | 此預設值與官方 Nano ID API 傳回的長度相同 |
| 批次數量 | 1 至 100 個 ID | 足以供初始資料批次、測試資料集或移轉作業使用 |
| 字母表 | 64 個符號:大寫字母、小寫字母、數字、底線、連字號 | 不含斜線、加號、等號或空白字元,因此 ID 放入 URL 後不會有所變動 |
| 隨機來源 | window.crypto.getRandomValues | 依 W3C Web Cryptography API 規範提供具密碼學強度的位元組 |
| 輸出 | 以換行分隔的文字,每行一個 ID | 可直接貼到指令碼、測試資料檔案或匯入流程中 |
| 重複值處理 | 顯示前進行批次層級的檢查 | 若同一批次內出現重複值,會引發錯誤,而不是靜默傳回 |
這個字母表與官方 Nano ID 專案所使用的 64 個符號集合相同:大寫字母、小寫字母、數字、底線與連字號。由於該集合不含斜線、加號、等號或空白字元,因此 ID 可以放在路徑區段或查詢參數中而無須跳脫。預設長度 21 個字元,與該專案一般 API 傳回的長度相同。
產生與複製作業完全在用戶端進行。不會有任何識別碼、數量、長度、剪貼簿內容、隨機位元組或使用事件傳送到伺服器,而且每個結果都會保留在目前分頁中,直到您複製它或關閉頁面。
以三個步驟產生批次
- 開啟Nano ID 產生器,將 ID 長度設為 1 至 128 個字元,再將數量設為 1 至 100。除非有實測依據支持,否則請保留 21 個字元的預設值。
- 產生批次。此工具從 window.crypto.getRandomValues 取得隨機位元組,利用 Nano ID 的拒絕取樣方法將其對應至 64 個符號的字母表,並在顯示前檢查完成批次的重複值。
- 複製以換行分隔的 ID,並在持久性資料儲存區中再次強制執行唯一性:在 ID 欄位上加入唯一性限制、以原子方式處理衝突,而且只重試建立失敗的交易。
這三個步驟就是完整的工作流程。不需要建立帳戶、不必維護設定檔,也不需要在選擇長度與取得完成的 ID 之間往返伺服器。
隨機性的來源
此產生器不會呼叫 Math.random,也不會從時間戳記、計數器、瀏覽器指紋或決定性種子衍生數值。可預測的識別碼就不太像識別碼:如果觀察者能重播該序列,就能猜到接下來的值,而這會抵銷隨機公開代號的用途。
將隨機位元組對應至字元時,還有一個更微妙的陷阱。每當位元組範圍無法被字母表大小整除時,以隨機位元組取模字母表大小會使結果偏頗,而受青睞的符號出現頻率便會高於其他符號。此實作改採 Nano ID 的拒絕取樣方式:建立位元遮罩,捨棄落在字母表範圍外的遮罩值,並持續抽取,直到達到要求的長度。W3C Web Cryptography API 是隨機 primitives 背後的規格,而相同的瀏覽器端方法也在使用 Web Crypto 隨機性在本地產生 Nano ID中介紹。
有一項計算可以顯示預設空間的大小:
- 字母表包含 64 個符號,而 64 等於 2 的 6 次方,因此每個字元攜帶 6 個隨機位元。
- 預設長度為 21 個字元。
- 21 個字元乘以每個字元 6 個位元,會在預設值中產生 126 個位元的隨機性。
這個 126 位元數字描述的是套用任何應用程式行為之前,識別碼的隨機空間,並不保證輸出不會發生碰撞。它也沒有說明該值是否適合用於密碼欄位。官方專案仍是生態系相容性的權威來源,因此請將此頁面視為便利的產生工具,而不是對該程式庫語意的變更。
選擇合適的長度與格式
縮短 ID 會以指數方式縮減可用空間,並隨著集合增長而提高碰撞機率。沒有任何長度能完全避免碰撞,本頁面也不作此類宣稱。在偏離 21 個字元的預設值之前,請權衡預期發放數量、您願意接受的碰撞風險、重試行為、紀錄在儲存系統中的保存時間,以及識別碼是否會暴露於敵對者。
格式的重要性不亞於長度,因為除了隨機性之外,Nano ID 不帶有任何結構。
| 格式 | 編碼內容 | 排序方式 | 適用範圍 |
|---|---|---|---|
| Nano ID | 只有隨機性 | 無 | 用於 URL、檔案名稱與紀錄的精簡公開識別碼 |
| UUID version 4 | 以固定文字格式表示隨機性 | 無 | 需要標準化 UUID 表示方式的系統 |
| ULID | 隨機性加上內嵌時間戳記 | 依字典順序排列時間 | 需要可排序建立順序的資料庫 |
| 時間戳記或計數器值 | 時間或序列 | 依建構方式按時序排列 | 可接受可預測性的舊有序列 |
每種格式的精確隨機空間數字都來自該格式本身的工具;本頁面的數字僅適用於 Nano ID。如果您的技術堆疊需要標準化的 UUID 表示方式,UUID 產生器可以在瀏覽器中建立 RFC 4122 version 4 值。如果紀錄需要依建立時間排序,ULID 產生器可以產生可排序的識別碼,並解碼內嵌的毫秒時間戳記。
不要從隨機字元推斷時序或業務意義。Nano ID 字串並非循序遞增,也不會編碼時間、區域、分片、紀錄類型或建立順序,因此,需要字典順序時間排序、離線解碼或標準化 UUID 表示方式的系統,應選擇專為該用途設計的格式。
重複值檢查的範圍
每個產生的批次在顯示前都會經過重複值檢查,如果該批次內出現重複值,此工具會回報錯誤,而不是悄悄傳回。當長度為 1 時,只能產生 64 個不同的 ID,因此數量為 65 至 100 時必然包含重複值,並導致批次發生錯誤;該長度應使用 64 或更少的數量。這項檢查僅限於您剛產生的批次。它不會與其他分頁、其他裝置、其他程序、其他部署或先前工作階段所產生的 ID 協同處理。
正因如此,最終權威必須是持久性資料儲存區。先檢查再插入會留下一段時間窗口,讓兩個並行寫入者都能通過檢查,因此請在 ID 欄位上加上唯一性限制,並以原子方式建立:嘗試插入,當資料庫回報衝突時,只重試該次建立失敗的交易,而不是整個批次。若資料表具有適當的限制,重複插入嘗試很容易偵測,也很容易重試。
此工具不應用於哪些用途
隨機識別碼不是憑證。此產生器不提供身分驗證、授權、加密或密祕管理,而且存取控制必須與 ID 看起來是否隨機無關。不要在此產生密碼、API 金鑰、復原碼、簽署素材或其他高價值密祕。瀏覽器擴充功能、遭入侵的指令碼與遭入侵的裝置仍可能觀察到頁面資料,因此請針對這些工作使用目標平台專用的憑證產生器與安全儲存機制。隱私權細節與威脅模型在線上使用 Nano ID 產生器是否安全?中有說明。
用戶端產生可避免伺服器成為記錄或儲存識別碼的地方,但並不能將瀏覽器排除在信任邊界之外。
測試 ID 實際經過的路徑
識別碼很少只沿著單一路徑傳輸,因此請先測試每一條路徑,再依賴它。將值儲存在能保留大小寫以及兩種標點符號——底線與連字號——的欄位中,因為會折疊大小寫或捨棄字元的定序或儲存設定,可能在寫入過程中悄然改變 ID。加入唯一性限制,並測試每個會處理該 ID 的路徑、日誌處理器、分析系統、CSV 匯出功能與資料庫定序規則。截斷長值的日誌行、重新加引號的匯出內容,或將兩個不同 ID 視為相等的不分大小寫定序規則,之後都可能以難以回溯的不符形式浮現。
除非有實測需求支持其他長度,否則請保留 21 個字元的預設值,確認您的綱要會保留完全相同的字串,並讓資料庫處理衝突。這種組合能維持廣大的隨機空間、讓值僅憑字串即可重現,也能讓每個並行寫入者都能看到唯一性判斷。