verifyCardNumber (validation) and getBankNameFromCardNumber (BIN-based bank lookup). For extracting card numbers from free text, see the Extract Card Numbers page.
Functions
verifyCardNumber(digits)
boolean | undefined (returns undefined for falsy input).
Two-stage algorithm
- Whitespace strip + format check:
/^\d{16}$/. - Reject if middle 10 digits (
slice(1,11)) OR last 6 digits (slice(10,16)) are all zero. - The 6-digit BIN must be in
iranianBankPrefixes— non-Iranian cards are rejected even if Luhn-valid. - Standard Luhn checksum.
getBankNameFromCardNumber(digits)
string | null | undefined — see Bank Name from Card Number for the dedicated page.
Composition
Pitfalls
- Both return
undefinedon falsy input — use=== true/=== "string", not truthy checks. - Non-Iranian Luhn-valid cards (e.g. test
4111...) are rejected. Intentional. - Persian/Arabic digit input is not normalized — pre-convert with
autoConvertDigitsToEN. - To extract card numbers from text, use
extractCardNumber(singular) from Extract Card Numbers. There is noextractCardNumbers(plural) export. - Adding new BINs: edit both the
iranianBankPrefixesset (verifier) and thecardBanktable (lookup) in lock-step.
Source
src/modules/verifyCardNumber/index.ts, src/modules/getBankNameFromCardNumber/index.ts · Tests: test/verifyCardNumber.spec.ts, test/getBankNameFromCardNumber.spec.ts