5 个稳定版本
1.1.0 | 2021 年 10 月 30 日 |
---|---|
1.0.4 |
|
#1604 在 算法
2,774 每月下载量
20KB
225 行
使用 Luhn 算法验证字符串并计算校验位。
这是一个快速、无分配和恐慌的 crate,用于计算和验证十进制和字母数字序列的 Luhn 校验和。这是我自己的 crate。有很多类似的,但这个是我的。
这不是一个很棒的校验和,但它被用在很多地方
- 信用卡号码
- 国际证券识别号 (ISIN) 代码
- 国际移动设备标识 (IMEI) 代码
- 加拿大社会保险号码
更多信息可在 维基百科 上找到。
用法
在您的 Cargo.toml
中将 luhn3
添加到 [dependencies]
[dependencies]
luhn3 = "1.1"
大多数信用卡号码都使用 Luhn 校验和
// Visa
luhn3::valid(b"4111111111111111"); // true
// MasterCard
luhn3::valid(b"5555555555554444"); // true
// Invalid Visa
luhn3::valid(b"4111111111111121"); // false
库还允许计算缺失的校验和
// Take off the checksum from American Express card number
let (&check, body) = b"378282246310005".split_last().unwrap();
// and recalculate it
luhn3::checksum(body); // Some(b'5')
decimal
仅在由十进制数字组成的序列上操作,例如信用卡号码或IMEI
代码alphanum
在由十进制数字和大写拉丁字母组成的序列上操作,例如ISIN
或NSIN
no_std
crate 不使用 std
性能
库包含针对十进制和字母数字输入的标量实现。对于验证,有接受切片和接受数组的变体。唯一的区别是编译器可以更好地优化数组的操作,因此它们稍微快一点。
validate isin time: [13.136 ns 13.181 ns 13.230 ns]
validate isin arr time: [9.5167 ns 9.5647 ns 9.6168 ns]
validate visa time: [8.3910 ns 8.4963 ns 8.6302 ns]
validate visa arr time: [5.3921 ns 5.4192 ns 5.4487 ns]
对于非 64 位平台,对字母数字输入的实现可能性能更好。