隨機 NanoID 產生器
產生加密安全的 NanoID —— UUID 的現代化、緊湊型替代方案。具有可定制的字母表(URL 安全、十六進制、字母數字、無混淆字符)、可調節長度(8-64 個字符)、碰撞機率計算器、批量產生和一鍵複製功能。非常適合構建數據庫、API、URL 縮短器和分布式系統的開發人員。
偵測到廣告封鎖,導致我們無法顯示廣告
MiniWebtool 依靠廣告收入免費提供服務。如果這個工具幫到你,歡迎升級 Premium(無廣告 + 更快),或將 MiniWebtool.com 加入允許清單後重新整理頁面。
- 或升級 Premium(無廣告)
- 允許 MiniWebtool.com 顯示廣告,然後重新載入
隨機 NanoID 產生器
歡迎使用隨機 NanoID 產生器,這是一個強大的在線工具,用於產生安全、URL 友好的唯一字符串標識符。NanoID 是 UUID (通用唯一識別碼) 的現代、輕量級替代方案,提供更短的 ID 且具有相當的抗碰撞性。無論您是在構建 API、數據庫、URL 縮短器還是分布式系統,此產生器都提供具有可定制字母表、可調節長度和實時碰撞機率分析的加密安全 ID。
什麼是 NanoID?
NanoID 是一個微型、安全、URL 友好的唯一字符串 ID 產生器,最初由 Andrey Sitnik 為 JavaScript 創建。此後,它已被移植到所有主要的編程語言中。NanoID 的關鍵創新在於使用更大的字母表(預設 64 個字符)而不是 UUID 的 16 個十六進制數字,這意味著每字符熵更多,ID 更短。
預設的 NanoID 看起來像:V1StGXR8_Z5jdHi6B-myT
NanoID 與 UUID 對比
| 特性 | NanoID | UUID v4 |
|---|---|---|
| 預設長度 | 21 個字符 | 36 個字符(包含連字號) |
| 字母表大小 | 64 個字符 (A-Za-z0-9_-) | 16 個字符 (0-9a-f) |
| 熵 | ~126 位(21 字符) | ~122 位(32 十六進制數字) |
| URL 安全 | ✓ 無需編碼 | ✗ 連字號在某些語境下需要編碼 |
| 可定制 | ✓ 字母表和長度 | ✗ 固定格式 (8-4-4-4-12) |
| 尺寸效率 | ✓ 每字符 6 位 | ✗ 每字符 4 位 |
| 格式 | 緊湊字符串 | xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx |
此工具如何產生安全的 NanoID
加密隨機性
此產生器使用 Python 的 secrets 模組,該模組提供由操作系統熵源(Linux/macOS 上的 /dev/urandom,Windows 上的 CryptGenRandom)支持的加密安全隨機數產生。NanoID 中的每個字符都是從所選字母表中獨立且不可預測地選擇的。
字母表預設
我們提供 9 種精心挑選的字母表預設,以適應不同的用例:
- NanoID 預設 (64 字符): 標準 NanoID 字母表
A-Za-z0-9_-。URL 安全、緊湊且廣泛兼容。每字符 6 位熵。 - 字母數字 (62 字符): 僅包含字母和數字,無特殊字符。適用於文件名、數據庫字段以及符號可能導致問題的語境。
- 十六進制 (16 字符): 傳統的十六進制格式。當 ID 需要與基於十六進制的系統(如 CSS 顏色或哈希摘要)集成時非常有用。
- 僅數字 (10 字符): 僅數字 ID。適用於訂單號、參考代碼或僅接受數字的系統。
- 小寫 / 大寫 (26 字符): 適用於不區分大小寫的系統或追求視覺一致性的單大小寫字母表。
- 無混淆字符 (57 字符): 移除了在許多字體中容易混淆的字符 (1/l/I,0/O/o)。非常適合人工讀取的代碼,如邀請鏈接、確認號以及任何需要人工輸入的 ID。
- URL 安全 (66 字符): 根據 RFC 3986 未保留字符擴展的字母表,包含
-._~。 - 自定義字母表: 定義您自己的字符集。字符將自動去重。
碰撞機率解釋
碰撞機率衡量兩個獨立產生的 ID 相同的可能性。這在概率論中受生日問題支配:
- 總可能 ID: 字母表大小 ^ id 長度。對於預設 NanoID: 64^21 = ~2^126
- 對於 n 個產生的 ID: 碰撞機率 ~ n^2 / (2 * 總可能數)
- 使用 1,000 個 ID: 機率極小 (~10^-33)
- 要達到 1% 碰撞機會(使用預設設置): 您需要約 ~10^18 個 ID (一百京)
此頁面上的碰撞機率計算機根據您選擇的字母表和 ID 長度顯示實時分析,幫助您為您特定的規模做出明智的 ID 配置決策。
如何使用 NanoID 產生器
- 選擇字母表預設: 從 9 種預設中選擇或定義自定義字母表。字母表預覽會顯示將要使用的確切字符。
- 設置 ID 長度: 選擇 8 到 64 個字符。預設值為 21,使用標準字母表提供約 126 位熵。
- 配置可選設置: 為命名空間 ID 添加前綴(例如 "usr_"、"doc_")並選擇數量 (1-50)。
- 產生並複製: 點擊「產生 NanoID」來創建您的 ID。使用一鍵複製功能複製單個 ID 或一次性複製所有 ID。
NanoID 的應用場景
數據庫主鍵
NanoID 是數據庫極佳的主鍵。它們比 UUID 短(21 對 36 個字符),節省存儲空間並減小索引大小。使用前綴如 "usr_" 或 "ord_" 使 ID 具有自我描述性。
API 資源標識符
NanoID 預設 URL 安全,使其成為 REST API 端點的理想選擇:/api/users/V1StGXR8_Z5jdHi6B-myT。無需 URL 編碼,且在日誌和 URL 中看起來很整潔。
URL 縮短器
具有預設字母表的 10 字符 NanoID 提供 64^10 = ~10^18 種可能組合——足以滿足任何 URL 縮短器的需求。無混淆字符字母表在這裡特別有用,因為用戶可能需要手動輸入短 URL。
會話令牌和 CSRF 令牌
由於此工具使用加密隨機性,產生的 ID 適用於安全令牌。對於敏感的安全應用,請使用更長的長度(32-64 個字符)。
分布式系統
NanoID 可以在多個服務器上獨立產生而無需協調,不像自動遞增整數。即使在大規模情況下,碰撞機率也微乎其微。
文件名命名
使用字母數字預設可在所有操作系統上實現安全的文件名。沒有特殊字符意味著在 Windows、macOS 或 Linux 上沒有轉義問題。
選擇合適的長度
| 長度 | 熵 (64 字符字母表) | 最適用於 | 1% 碰撞閾值 |
|---|---|---|---|
| 8 | 48 位 | 短 URL, 小數據集 | ~1600 萬個 ID |
| 12 | 72 位 | 通用目的, 中型數據集 | ~680 億個 ID |
| 16 | 96 位 | 大型系統, 高吞吐量 | ~280 萬億個 ID |
| 21 | 126 位 | 預設, 大多數應用 | ~10^18 個 ID |
| 32 | 192 位 | 安全令牌, 超級安全 | ~10^28 個 ID |
| 64 | 384 位 | 最大安全性 | ~10^57 個 ID |
代碼示例
JavaScript (使用 nanoid 軟件包)
// 預設:21 字符, URL 安全字母表
const id = nanoid(); // "V1StGXR8_Z5jdHi6B-myT"
// 自定義長度
const shortId = nanoid(10); // "IRFa-VaY2b"
// 自定義字母表
import { customAlphabet } from 'nanoid';
const hexId = customAlphabet('0123456789abcdef', 12);
Python (使用 nanoid 軟件包)
# 預設 NanoID
id = generate() # "V1StGXR8_Z5jdHi6B-myT"
# 自定義長度和字母表
id = generate('0123456789abcdef', 12)
常見問題
什麼是 NanoID,它與 UUID 有什麼區別?
NanoID 是一個微型、安全、URL 友好的唯一字符串 ID 產生器。它預設長度為 21 個字符(而 UUID 為 36 個字符),使用更大的字母表 (A-Za-z0-9_-) 以獲得更多的每字符熵,無需編碼即可實現 URL 安全,且沒有固定的格式或連字號。NanoID 能夠以更少的字符實現與 UUID v4 相似的抗碰撞性,因為它使用了 64 個符號而不是 16 個十六進制數字。
此工具產生的 NanoID 安全嗎?
此工具使用 Python 的 secrets 模組,該模組提供由操作系統熵源支持的加密安全隨機數產生。每個字符都是獨立且不可預測地選擇的。使用標準字母表的預設 21 字符 NanoID 具有約 126 位熵,與 UUID v4 的約 122 位熵相當。
我的項目應該使用多長的 NanoID?
預設長度 21 個字符在使用標準字母表時提供約 126 位熵,足以滿足大多數應用。對於 URL 縮短器或面向用戶的 ID, 8-12 個字符可能就足夠了,具體取決於您的總 ID 數量。對於產生數百萬個 ID 的分布式系統,21 個以上的字符可確保碰撞機率微乎其微。使用碰撞機率計算機為您特定的用例找到合適的長度。
我可以將 NanoID 用作數據庫主鍵嗎?
可以,NanoID 非常適合作為數據庫主鍵。它們緊湊(21 個字符對比 UUID 的 36 個字符)、URL 安全,並且具有出色的抗碰撞性。然而,與自動遞增的整數不同,它們不是順序的——因此如果您的數據庫使用 B 樹索引,隨機 ID 可能會導致更多的頁面拆分。考慮使用前綴(如 'usr_' 或 'ord_')使 ID 具有自我描述性。
什麼是「無混淆字符」字母表預設?
無混淆字符 (No-Lookalike) 預設移除了在許多字體中看起來相似的字符:1/l/I(數字 1、小写字母 L、大寫字母 I)和 0/O/o(數字 0、大寫字母 O、小寫字母 O)。這使得 ID 更易於閱讀、記錄和口頭交流。它非常適合面向用戶的 ID,如邀請碼、確認號或任何需要人工輸入的 ID。
額外資源
引用此內容、頁面或工具為:
"隨機 NanoID 產生器" 於 https://MiniWebtool.com/zh-tw//,來自 MiniWebtool,https://MiniWebtool.com/
由 miniwebtool 團隊提供。更新日期:2026年2月7日