#id-generator #unique-id #id #random #uuid #url #random-string

nanoid

A tiny, secure, URL-friendly, unique string ID generator for Rust

7 个不稳定版本

0.4.0 2021年4月7日
0.3.0 2020年2月8日
0.2.0 2018年1月7日
0.1.3 2018年1月6日
0.1.0 2017年12月26日

#258 in Web 编程

Download history 52316/week @ 2024-03-14 55040/week @ 2024-03-21 45941/week @ 2024-03-28 59757/week @ 2024-04-04 49656/week @ 2024-04-11 55424/week @ 2024-04-18 60127/week @ 2024-04-25 63365/week @ 2024-05-02 52502/week @ 2024-05-09 60518/week @ 2024-05-16 57675/week @ 2024-05-23 61750/week @ 2024-05-30 60144/week @ 2024-06-06 65717/week @ 2024-06-13 61583/week @ 2024-06-20 49853/week @ 2024-06-27

249,555 monthly downloads
用于 285 个 Crates (144 直接)

MIT 许可证

14KB
132

Nano ID

Package version License Travis build status Appveyor build status Maintenance intention for this crate

A tiny, secure, URL-friendly, unique string ID generator for Rust

use nanoid::nanoid;

fn main() {
   let id = nanoid!(); //=> "Yo1Tr9F3iF-LFHX9i9GvA"
}

安全。 它使用密码学强随机 API 并保证符号的适当分布。

紧凑。 它使用比 UUID 更大的字母表 (A-Za-z0-9_-),并且只需 21 个符号而不是 36 个符号就有相同数量的唯一 ID。

使用方法

安装

[dependencies]
nanoid = "0.4.0"

简单

主模块使用 URL 友好符号 (A-Za-z0-9_-) 并返回一个 21 个字符的 ID。

use nanoid::nanoid;

fn main() {
   let id = nanoid!(); //=> "Yo1Tr9F3iF-LFHX9i9GvA"
}

符号 -,.() 不会在 URL 中编码。如果用于链接的末尾,它们可能会被识别为标点符号。

自定义长度

如果您想缩短 ID 长度(并增加碰撞概率),可以将长度作为参数传递给生成函数

use nanoid::nanoid;

fn main() {
   let id = nanoid!(10); //=> "IRFa-VaY2b"
}

自定义字母表或长度

如果您想更改 ID 的字母表或长度,可以将自定义字母表作为第二个参数传递给 nanoid!()

use nanoid::nanoid;

fn main() {
    let alphabet: [char; 16] = [
        '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f'
    ];

   let id = nanoid!(10, &alphabet); //=> "4f90d13a42"
}

字母表必须包含 256 个符号或更少。否则,生成器将不安全。

自定义随机字节生成器

您可以使用 complex 模块替换默认的安全随机生成器。例如,要使用基于种子的生成器。

use nanoid::nanoid;

fn random_byte () -> u8 { 0 }

fn main() {
    fn random (size: usize) -> Vec<u8> {
        let mut bytes: Vec<u8> = vec![0; size];

        for i in 0..size {
            bytes[i] = random_byte();
        }

        bytes
    }

    nanoid!(10, &['a', 'b', 'c', 'd', 'e', 'f'], random); //=> "fbaefaadeb"
}

random 函数必须接受数组大小并返回一个随机数字的向量。

如果您想使用与 format 相同的 URL 友好符号,可以从 url 模块获取默认字母表

use nanoid::nanoid;

fn random (size: usize) -> Vec<u8> {
    let result: Vec<u8> = vec![0; size];

    result
}

fn main() {
    nanoid!(10, &nanoid::alphabet::SAFE, random); //=> "93ce_Ltuub"
}

其他编程语言

依赖

~310KB