Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

/p/g1magld5ptgzaktqcexxq0pgq5lmdf0kz6re8hlv/x/daily/luhn/v0

Directory · 4 Files
README.md Open

gno.land/p/moul/x/daily/luhn/v0

Luhn mod-10 checksum — Valid, CheckDigit, Append, MaxLen.

The check behind credit-card numbers, IMEIs and many national ID schemes (Hans Peter Luhn, 1954). Spaces and hyphens are ignored, so the formatting a human would paste works as-is.

1import "gno.land/p/moul/x/daily/luhn/v0"
2
3luhn.Valid("4539 1488 0343 6467")   // true  — separators ignored
4luhn.Valid("4539148803436468")      // false — one digit off
5luhn.CheckDigit("7992739871")       // 3, true
6luhn.Append("7992739871")           // "79927398713", true

⚠️ A typo check, not a security check. Luhn catches every single-digit error and nearly every transposition of adjacent digits, but anyone can compute a valid number in a second, and validity says nothing about whether the identifier exists. Never use it to authorize anything on-chain.

MaxLen (64) bounds an input so validation gas stays predictable. Note that a string of zeros is technically Luhn-valid and is accepted — reject it in the caller if your domain needs to.

Live demo: r/moul/x/daily/luhndemo · render it at /r/moul/x/daily/luhndemo/v0.


Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.

🧪 Highly experimental — potentially vibe-coded. Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: DISCLAIMER.