#unique-id #random #tiny #prefixed #stack #alphabet #url-friendly

pillid

一个更小的、带前缀的、URL友好的、时间排序的、可堆栈存储的唯一ID

5 个不稳定版本

0.3.0 2024年3月17日
0.2.0 2023年11月30日
0.1.5 2023年11月30日

#4 in #prefixed

26 每月下载量

MIT 许可证

15KB
305

pillid

Rust 中随机、短、抗碰撞的ID。


lib.rs:

一个小巧、安全、URL友好的、可选带前缀、可选带时间戳的唯一字符串ID生成器

安全。它使用加密强随机API,并保证符号的正确分布。

紧凑。它使用比UUID更大的字母表(A-Za-z0-9),在22个符号中就有更多的唯一ID,而不是36个。

[dependencies]
pillid = "0.4.0"
use pillid::pillid;

fn main() {
   let id = pillid!(); //=> "cNbQxzR55W2RbkPoERACA"
}

用法

简单

主模块使用URL友好的符号(A-Za-z0-9)并返回一个22个字符的ID(相当于128位随机数)。

use pillid::pillid;

fn main() {
   let id = pillid!(); //=> "cNbQxzR55W2RbkPoERACA"
}

自定义长度

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

use pillid::pillid;

fn main() {
   let id = pillid!(10); //=> "QhpvygNybI"
}

自定义字母表或长度

如果您想更改ID的字母表或长度,可以使用低级 custom 模块。

use pillid::pillid;

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

   let id = pillid!(10, &alphabet); //=> "f42ega7402"
}

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

自定义随机字节生成器

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

use pillid::pillid;

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
    }

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

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

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

use pillid::pillid;

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

    result
}

fn main() {
    pillid!(10, &pillid::alphabet::DEFAULT, random); //=> "93celLtuub"
}

依赖关系

~245–345KB