11个版本
0.2.2 | 2021年10月23日 |
---|---|
0.2.1 | 2020年9月28日 |
0.2.0 | 2020年3月31日 |
0.1.6 | 2019年1月30日 |
0.1.2 | 2016年10月17日 |
#172 在 编码
8,528 每月下载次数
在 17 个 crate(直接使用9个)中使用
37KB
761 行
Harsh 是一个用于生成类似YouTube ID的数字的Rust实现。当你不希望向用户暴露数据库ID时使用它:http://hashids.org/javascript
快速示例
let harsh = Harsh::default();
let id = harsh.encode(&[1, 2, 3]); // "o2fXhV"
let numbers = harsh.decode(id).unwrap(); // [1, 2, 3]
让你的ID唯一
传递一个项目名称以使你的ID唯一
let harsh = Harsh::builder().salt("My Project").build().unwrap();
let id = harsh.encode(&[1, 2, 3]).unwrap(); // "Z4UrtW"
let harsh = Harsh::builder().salt("My Other Project").build().unwrap();
let id = harsh.encode(&[1, 2, 3]).unwrap(); // "gPUasb"
使用填充使你的ID更长
注意,ID仅填充到至少一定长度。这并不意味着你的ID将是 确切 的那个长度。
let harsh = Harsh::default(); // no padding
let id = harsh.encode(&[1]).unwrap() // "jR"
let harsh = Harsh::builder().length(10).build().unwrap(); // pad to length 10
let id = harsh.encode(&[1]).unwrap() // "VolejRejNm"
传递一个自定义字母表
let harsh = Harsh::builder().alphabet("abcdefghijklmnopqrstuvwxyz").build().unwrap(); // all lowercase
let id = harsh.encode(&[1, 2, 3]); // "mdfphx"
将十六进制编码而不是数字编码
如果你想编码Mongo的ObjectId,这很有用。注意,没有限制你可以传递多大的十六进制数字(它不必是Mongo的ObjectId)。
let harsh = Harsh::default();
let id = harsh.encode_hex("507f1f77bcf86cd799439011").unwrap(); // "y42LW46J9luq3Xq9XMly"
let hex = harsh.decode_hex("y42LW46J9luq3Xq9XMly").unwrap(); // "507f1f77bcf86cd799439011"
陷阱
-
在解码时,输出始终是一个数字数组(即使你只编码了一个数字)
let harsh = Harsh::default(); let id = harsh.encode(&[1]).unwrap(); println!("{:?}", harsh.decode(&id).unwrap()); // [1]
-
不支持编码负数。
-
如果你向
encode()
传递虚假输入,将返回一个空字符串let harsh = Harsh::default(); let id = harsh.decode("a123"); // note lack of unwrap call; would panic here println!("{:?}", id); // ""
-
不要将此库用作安全工具,也不要编码敏感数据。这不是一个加密库。
随机性
Hashids的主要目的是混淆ID。它不是用来作为安全或压缩工具的,也没有进行过这样的测试。话虽如此,这个算法确实试图使这些ID随机且不可预测。
不会显示重复的数字模式,因此ID中不会有3个相同的数字
let harsh = Harsh::default();
println!("{}", harsh.encode(&[5, 5, 5])); // A6t1tQ
与递增的数字相同
let harsh = Harsh::default();
println!("{}", harsh.encode(&[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])); // wpfLh9iwsqt0uyCEFjHM
println!("{}", harsh.encode(&[1])); // jR
println!("{}", harsh.encode(&[2])); // k5
println!("{}", harsh.encode(&[3])); // l5
println!("{}", harsh.encode(&[4])); // mO
println!("{}", harsh.encode(&[5])); // nR
该死!#$%@
编写此代码的目的是将创建的ID放置在可见位置,如URL。因此,算法试图通过生成以下字母永远不会相邻的ID来避免生成大多数常见的英文诅咒词
c, f, h, i, s, t, u
支持
有问题?在此处创建一个问题,或者找到原始JavaScript库的作者
也许有一天我会抽出时间来修复我的网站。:)
变更日志
0.2.0
- 转换为基于结果的API,并添加快速检查测试,感谢Dr-Emann。
0.1.5
- 修复了解码包含不在字母表中出现的字符的值时的panic问题
0.1.3
- 移除对clippy的依赖。(仍然在使用clippy,但现在只是作为
cargo clippy
使用。)
0.1.2
- 将
HarshFactory
更改为HarshBuilder
,以停止挠我的强迫症1 - 更新了依赖项
- 对于由此造成的不便,我深表歉意,但我们都清楚从长远来看这是更好的选择;如果我保持理智,我就可以继续更新这个库!
许可证
根据您的选择,许可如下
- Apache License,版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义的您有意提交以包含在作品中的任何贡献,将按照上述方式双重许可,不附加任何额外条款或条件。