5 个稳定版本

1.1.0 2021 年 10 月 30 日
1.0.4 2021 年 10 月 24 日

#1604算法

Download history 441/week @ 2024-04-07 651/week @ 2024-04-14 341/week @ 2024-04-21 452/week @ 2024-04-28 454/week @ 2024-05-05 589/week @ 2024-05-12 614/week @ 2024-05-19 604/week @ 2024-05-26 463/week @ 2024-06-02 563/week @ 2024-06-09 740/week @ 2024-06-16 527/week @ 2024-06-23 664/week @ 2024-06-30 757/week @ 2024-07-07 510/week @ 2024-07-14 812/week @ 2024-07-21

2,774 每月下载量

MIT 许可证

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')

此库提供两组操作:decimalalphanum

  • decimal 仅在由十进制数字组成的序列上操作,例如信用卡号码或 IMEI 代码
  • alphanum 在由十进制数字和大写拉丁字母组成的序列上操作,例如 ISINNSIN

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 位平台,对字母数字输入的实现可能性能更好。

无运行时依赖