Check-digit algorithms and identifier validation for MoonBit: Luhn, Verhoeff, Damm, credit cards, IBAN, IMEI
fn main {
// 7992739871 -> check digit 3
println(luhn_check_digit("7992739871")) // Some(3)
println(luhn_valid("79927398713")) // true
// Brand detection and full card check
println(detect_brand("378282246310005")) // amex
println(card_valid("378282246310005")) // true
// IBAN accepts spaces and lowercase
println(iban_valid("gb82 west 1234 5698 7654 32")) // true
println(iban_format("GB82WEST12345698765432")) // Some("GB82 WEST 1234 5698 7654 32")
}| Area | Functions |
|---|---|
| Luhn (mod 10) | luhn_valid, luhn_check_digit |
| Verhoeff (dihedral group D5) | verhoeff_valid, verhoeff_check_digit |
| Damm (anti-symmetric quasigroup) | damm_valid, damm_check_digit |
| Payment cards | card_valid, detect_brand, card_format, CardBrand |
| IBAN | iban_valid, iban_country, iban_bban, iban_format, iban_normalize, iban_expected_length, iban_check_digits, iban_assemble |
| IMEI | imei_valid, imei_check_digit, imei_tac, imei_serial |
moon add sssssurf/checkdigitmoon run cmd/main -- card 378282246310005
moon run cmd/main -- iban "gb82 west 1234 5698 7654 32"
moon run cmd/main -- imei 490154203237518
moon run cmd/main -- luhn 7992739871
moon run cmd/main -- verhoeff 236
moon run cmd/main -- damm 572$ moon run cmd/main -- imei 490154203237518
imei: 490154203237518
tac: 49015420
serial: 323751
check digit: 8
status: valid| 已有库 | 它解决的问题 | 与本库的边界 |
|---|---|---|
| Betterlol/moon_zod、cosgammmmma/moonschema、mizchi/jsonschema | JSON / 数据结构的 schema 校验:字段类型、必填、email / uuid / url 等格式约束 | 它们校验数据的形状与格式,不做任何算术校验位运算。本库只做数字标识符的校验位算法,不解析 JSON,也不定义 schema。 |
| ryota0624/moovalid | 通用校验组合子(Validated、错误累积、in_range 等) | 它提供校验框架;本库提供具体领域算法。本库不提供错误累积或组合子 API。 |
| ZJH-666-ZJH/moonmrz | ICAO 9303 机读区(护照 / 签证 MRZ)的 7-3-1 校验位 | 唯一的交集是"校验位"这个概念。它面向旅行证件 MRZ 文本,使用 ICAO 9303 的 7-3-1 加权方案;本库面向支付卡 / 银行账号 / 设备号,使用 Luhn、Verhoeff、Damm 与 mod-97。两者的算法、输入格式、应用领域均不同。 |
moon testpub enum CardBrand {
Visa
Mastercard
Amex
Discover
Jcb
DinersClub
UnionPay
Maestro
Unknown
}fn card_format(s : String) -> String?fn card_valid(s : String) -> Boolfn damm_check_digit(payload : String) -> Int?fn damm_valid(s : String) -> Boolfn iban_assemble(country : String, bban : String) -> String?fn iban_bban(s : String) -> String?fn iban_check_digits(country : String, bban : String) -> String?fn iban_country(s : String) -> String?fn iban_expected_length(cc : String) -> Int?fn iban_format(s : String) -> String?fn iban_normalize(s : String) -> Stringfn iban_valid(s : String) -> Boolfn imei_check_digit(first14 : String) -> Int?fn imei_serial(s : String) -> String?fn imei_tac(s : String) -> String?fn imei_valid(s : String) -> Boolfn luhn_check_digit(payload : String) -> Int?fn luhn_valid(s : String) -> Boolfn verhoeff_check_digit(payload : String) -> Int?fn verhoeff_valid(s : String) -> BoolInstall
Download zipCheck-digit algorithms and identifier validation for MoonBit: Luhn, Verhoeff, Damm, credit cards, IBAN, IMEI