#base32 #identifier #codec #values #numeric #decoding

crockford

提供用于标识符(例如 u64 值)的 Crockford Base32 编码。

11 个版本 (7 个稳定版)

1.2.1 2023 年 11 月 18 日
1.1.2 2023 年 5 月 8 日
1.1.0 2021 年 2 月 1 日
1.0.1 2018 年 1 月 6 日
0.1.0 2017 年 5 月 24 日

#236 in 编码

Download history 187/week @ 2024-03-11 121/week @ 2024-03-18 72/week @ 2024-03-25 77/week @ 2024-04-01 49/week @ 2024-04-08 58/week @ 2024-04-15 32/week @ 2024-04-22 71/week @ 2024-04-29 290/week @ 2024-05-06 160/week @ 2024-05-13 219/week @ 2024-05-20 106/week @ 2024-05-27 128/week @ 2024-06-03 90/week @ 2024-06-10 63/week @ 2024-06-17 88/week @ 2024-06-24

每月 376 次下载
3 crates 中使用

MIT/Apache

17KB
266

crockford

64 位值的 Base32 编码。

Crockford Base32 编码最常用于使数字标识符稍微更易于用户识别。类似于Hashids,这里的目的是使标识符更短、更不令人困惑。与 Hashids 不同,Crockford Base32 在实际编码之外不做任何事情来隐藏数字的真实值,并且当你看到连续的标识符并排时,它们是顺序的这一点仍然相当明显。

这个库不支持任意数据的编码和解码;有一个另一个库用于此目的。此外,规范支持校验位数字的概念,但这个库目前不支持。

此库的主要目的是提供高性能、用户友好的数字标识符编码。为此,编码和解码实际上都相当快。有多快?根据我的测试,crockford解码比harsh快50倍,编码快27倍。

用法

编码

编码是一个单步过程。

let x = crockford::encode(5111);
assert_eq!("4ZQ", &*x);

如果你想使用小写,那么... 好吧,很抱歉。然而,我们现在支持将编码输出到您选择的缓冲区,而不是在函数中创建一个新的缓冲区。继续阅读以了解计划B...

计划B(更快的编码)

因为这是 Rust,我们特别关注运行时效率--或者至少,允许用户实现运行时效率。因此,我们提供了第二个更复杂的编码选项。

// The longest possible representation of u64 is 13 digits.
let mut buf = Vec::with_capacity(13);
crockford::encode_into(5111, &mut buf);

let result = std::str::from_utf8(&buf)?;
assert_eq!("4ZQ", result);

encode_into 方法也接受&mut String,如果您愿意的话。

解码

解码是一个两步过程。这是因为你可以向解码器输入任何字符串,如果你试图让解码器相信 "Hello, world!" 是一个数字,解码器将会返回一个错误。(提示:它不是。)

let x = crockford::decode("4zq");
let y = crockford::decode("4ZQ");

assert_eq!(5111, x?);
assert_eq!(5111, y?);

因此,第一步是调用解码函数。第二步是匹配/验证/展开/丢弃输出。

许可证

根据您的要求,在以下任一许可证下发布:

供您选择。

贡献

除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交以包含在工作中的任何贡献,都将根据上述方式双许可,无需任何额外的条款或条件。

无运行时依赖