# nanoid **Repository Path**: ledao/nanoid ## Basic Information - **Project Name**: nanoid - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-27 - **Last Updated**: 2026-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README > [English](./README_EN.md) # ledao/nanoid 一个小巧、URL 友好的唯一字符串 ID 生成器,面向 [MoonBit](https://www.moonbitlang.com/)。 ## 安装 ```bash moon add ledao/nanoid ``` 然后在用到它的那个包的 `moon.pkg` 里导入(MoonBit ≥ 0.10;更老的工具链请用等价的 `moon.pkg.json`): ``` import { "ledao/nanoid", } ``` ## 用法 ```moonbit // 使用默认 URL 安全字母表,生成 21 位 ID。 let id = @nanoid.new() // 更短的 ID。 let short = @nanoid.new(size=10) // 自定义字母表(例如小写十六进制)。 let hex = @nanoid.new(alphabet="0123456789abcdef", size=16) ``` ### 随机性与安全性 `new` 使用一个共享生成器,种子取自进程启动时间,因此同一次运行内连续生成的 ID 互不相同, 不同运行之间的序列也不同。但它是一个**快速 PRNG,并非 CSPRNG**——输出可由(粗粒度、可观测的) 启动时钟推断出来。**请勿**用 `new` 生成密码、会话令牌等任何需要不可猜测的值; 这类场景请通过 `generate` 传入你自己的、由密码学随机源支撑的生成器。 ### 可复现的输出 当你需要确定性输出(用于测试,或接入自定义熵源)时,自行创建并播种一个 `@random.Rand`, 再调用 `generate`。这会用到 `moonbitlang/core/random` 包,所以要把它和 `ledao/nanoid` 一起加进 `moon.pkg` 的导入里: ``` import { "ledao/nanoid", "moonbitlang/core/random", } ``` ```moonbit let rng = @random.Rand::chacha8(seed=b"0123456789abcdef0123456789abcdef") let id = @nanoid.generate(rng, size=16) ``` ## API | API | 说明 | | --- | --- | | `new(alphabet? : String, size? : Int) -> String` | 使用共享的默认生成器生成一个 ID。 | | `generate(@random.Rand, alphabet? : String, size? : Int) -> String` | 使用调用方传入的生成器生成一个 ID。 | | `default_alphabet : String` | 64 个符号的 URL 安全字母表(`A-Za-z0-9_-`)。 | | `default_size : Int` | 默认 ID 长度,`21`。 | 若 `alphabet` 为空或 `size` 不为正,`generate`(以及 `new`)会中止(abort)。 ## 许可证 Apache-2.0