#short #ids #encode #hashids

sqids

从数字生成短唯一标识符

8 个不稳定版本 (3 个破坏性更新)

0.4.1 2024年2月29日
0.4.0 2023年12月21日
0.3.1 2023年11月14日
0.3.0 2023年9月10日
0.1.1 2023年7月21日

#644 in Web 编程

Download history 108/week @ 2024-04-14 200/week @ 2024-04-21 201/week @ 2024-04-28 177/week @ 2024-05-05 207/week @ 2024-05-12 317/week @ 2024-05-19 287/week @ 2024-05-26 200/week @ 2024-06-02 252/week @ 2024-06-09 279/week @ 2024-06-16 305/week @ 2024-06-23 218/week @ 2024-06-30 179/week @ 2024-07-07 296/week @ 2024-07-14 279/week @ 2024-07-21 507/week @ 2024-07-28

1,296 每月下载量
用于 2 包

MIT 许可证

15KB
246

Sqids Rust

Latest version Github Actions Docs Downloads

Sqids (发音为 "squids") 是一个小型库,允许您从数字生成唯一标识符。它非常适合缩短链接、快速且安全的 URL 标识符生成以及快速解码回数字以加快数据库查找。

功能

  • 编码多个数字 - 从一个或多个非负数字生成短标识符
  • 快速解码 - 容易将标识符解码回数字
  • 唯一标识符 - 通过一次打乱字母表生成唯一标识符
  • 标识符填充 - 提供最小长度以使标识符更加统一
  • URL 安全 - 自动生成的标识符不包含常见的侮辱性词汇
  • 随机输出 - 顺序输入提供非连续标识符
  • 多种实现 - 支持 40 多种编程语言

🧰 应用场景

适合

  • 生成用于公开 URL 的标识符(例如:链接缩短)
  • 生成用于内部系统的标识符(例如:事件跟踪)
  • 解码以加快数据库查找(例如:通过主键)

不适合

  • 敏感数据(这不是一个加密库)
  • 用户标识符(可以解码并揭示用户数量)

🚀 开始使用

使用 cargo 添加

cargo add sqids

👩‍💻 示例

简单的编码和解码

# use sqids::Sqids;
let sqids = Sqids::default();
let id = sqids.encode(&[1, 2, 3])?; // "86Rf07"
let numbers = sqids.decode(&id); // [1, 2, 3]
# Ok::<(), sqids::Error>(())

注意 🚧 由于算法的设计,多个标识符可以解码回相同的数字序列。如果您的设计需要标识符是规范化的,您必须手动重新编码解码的数字并检查生成的标识符是否匹配。

为标识符设置 最小 长度

# use sqids::Sqids;
let sqids = Sqids::builder()
  .min_length(10)
  .build()?;
let id = sqids.encode(&[1, 2, 3])?; // "86Rf07xd4z"
let numbers = sqids.decode(&id); // [1, 2, 3]
# Ok::<(), sqids::Error>(())

通过提供自定义字母表来随机化标识符

# use sqids::Sqids;
let sqids = Sqids::builder()
  .alphabet("FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE".chars().collect())
  .build()?;
let id = sqids.encode(&[1, 2, 3])?; // "B4aajs"
let numbers = sqids.decode(&id); // [1, 2, 3]
# Ok::<(), sqids::Error>(())

防止在自动生成的标识符中出现特定的单词

# use sqids::Sqids;
let sqids = Sqids::builder()
  .blocklist(["86Rf07".to_string()].into())
  .build()?;
let id = sqids.encode(&[1, 2, 3])?; // "se8ojk"
let numbers = sqids.decode(&id); // [1, 2, 3]
# Ok::<(), sqids::Error>(())

📝 许可证

MIT

依赖项

~1.2–2.1MB
~45K SLoC