Skip to main content
Two complementary functions for working with Iranian card numbers: verifyCardNumber (validation) and getBankNameFromCardNumber (BIN-based bank lookup). For extracting card numbers from free text, see the Extract Card Numbers page.

Functions

verifyCardNumber(digits)

Return type: boolean | undefined (returns undefined for falsy input).

Two-stage algorithm

  1. Whitespace strip + format check: /^\d{16}$/.
  2. Reject if middle 10 digits (slice(1,11)) OR last 6 digits (slice(10,16)) are all zero.
  3. The 6-digit BIN must be in iranianBankPrefixes — non-Iranian cards are rejected even if Luhn-valid.
  4. Standard Luhn checksum.

getBankNameFromCardNumber(digits)

Return type: string | null | undefined — see Bank Name from Card Number for the dedicated page.

Composition

Pitfalls

  • Both return undefined on 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 no extractCardNumbers (plural) export.
  • Adding new BINs: edit both the iranianBankPrefixes set (verifier) and the cardBank table (lookup) in lock-step.

Source

src/modules/verifyCardNumber/index.ts, src/modules/getBankNameFromCardNumber/index.ts · Tests: test/verifyCardNumber.spec.ts, test/getBankNameFromCardNumber.spec.ts