Skip to main content

Bank Card Validation

Validate Iranian bank card numbers and extract card information including bank name.

Available Functions

  • verifyCardNumber - Validate card number checksum
  • getBankNameFromCardNumber - Get bank name from card number
  • extractCardNumbers - Extract card numbers from text

Basic Usage

import { verifyCardNumber, getBankNameFromCardNumber, extractCardNumbers } from "@persian-tools/persian-tools";

// Validate card number
console.log(verifyCardNumber("6037701689095443"));
// Output: true

// Get bank name
console.log(getBankNameFromCardNumber("6037701689095443"));
// Output: "بانک کشاورزی"

// Extract from text
console.log(extractCardNumbers("کارت من: 6037-7016-8909-5443"));
// Output: ['6037701689095443']

API Reference

verifyCardNumber

Validate a bank card number using the Luhn algorithm.
cardNumber
string
required
16-digit bank card number
result
boolean
true if valid, false otherwise
verifyCardNumber("6037701689095443"); // true
verifyCardNumber("1234567890123456"); // false

getBankNameFromCardNumber

Identify the bank from a card number.
cardNumber
string
required
Valid 16-digit bank card number
result
string
Bank name in Persian, or empty string if not found
getBankNameFromCardNumber("6037701689095443"); // "بانک کشاورزی"
getBankNameFromCardNumber("6219861034529007"); // "بانک سامان"

extractCardNumbers

Extract all card numbers from a text string.
text
string
required
Text containing card numbers
result
string[]
Array of extracted card numbers (cleaned, digits only)
extractCardNumbers("کارت ۱: 6037-7016-8909-5443 و کارت ۲: 6219861034529007");
// ['6037701689095443', '6219861034529007']

Examples

Payment Form Validation

import { verifyCardNumber, getBankNameFromCardNumber } from "@persian-tools/persian-tools";

interface CardValidation {
	isValid: boolean;
	bankName?: string;
	error?: string;
}

const validatePaymentCard = (cardNumber: string): CardValidation => {
	// Remove spaces and dashes
	const cleaned = cardNumber.replace(/[\s-]/g, "");

	if (cleaned.length !== 16) {
		return {
			isValid: false,
			error: "شماره کارت باید ۱۶ رقم باشد",
		};
	}

	if (!verifyCardNumber(cleaned)) {
		return {
			isValid: false,
			error: "شماره کارت نامعتبر است",
		};
	}

	const bankName = getBankNameFromCardNumber(cleaned);

	return {
		isValid: true,
		bankName: bankName || "نامشخص",
	};
};

console.log(validatePaymentCard("6037-7016-8909-5443"));
// {
//   isValid: true,
//   bankName: 'بانک کشاورزی'
// }

Display Card Information

import { getBankNameFromCardNumber } from "@persian-tools/persian-tools";

const formatCardDisplay = (cardNumber: string): string => {
	const bankName = getBankNameFromCardNumber(cardNumber);
	const masked = cardNumber.slice(0, 6) + "******" + cardNumber.slice(-4);

	return `${bankName} - ${masked}`;
};

console.log(formatCardDisplay("6037701689095443"));
// "بانک کشاورزی - 603770******5443"

Extract Cards from Email/SMS

import { extractCardNumbers, verifyCardNumber } from "@persian-tools/persian-tools";

const processPaymentMessage = (message: string) => {
	const cards = extractCardNumbers(message);

	const validCards = cards.filter((card) => verifyCardNumber(card));

	return validCards.map((card) => ({
		number: card,
		bank: getBankNameFromCardNumber(card),
		masked: card.slice(0, 6) + "******" + card.slice(-4),
	}));
};

const sms = `
  لطفا مبلغ را به کارت 6037-7016-8909-5443 واریز کنید.
  یا به کارت 6219861034529007
`;

console.log(processPaymentMessage(sms));
// [
//   { number: '6037701689095443', bank: 'بانک کشاورزی', masked: '603770******5443' },
//   { number: '6219861034529007', bank: 'بانک سامان', masked: '621986******9007' }
// ]

Multi-Card Support

import { verifyCardNumber, getBankNameFromCardNumber } from "@persian-tools/persian-tools";

interface SavedCard {
	id: string;
	number: string;
	bank: string;
	isPrimary: boolean;
}

const addCardToWallet = (cardNumber: string, existingCards: SavedCard[]): SavedCard[] => {
	if (!verifyCardNumber(cardNumber)) {
		throw new Error("شماره کارت نامعتبر است");
	}

	const newCard: SavedCard = {
		id: Date.now().toString(),
		number: cardNumber,
		bank: getBankNameFromCardNumber(cardNumber),
		isPrimary: existingCards.length === 0,
	};

	return [...existingCards, newCard];
};

Use Cases

Validate cards during checkout:
const processPayment = (cardNumber: string) => {
  if (!verifyCardNumber(cardNumber)) {
    throw new Error('کارت نامعتبر است');
  }
  const bank = getBankNameFromCardNumber(cardNumber);
  // Process payment with bank
};
Store and manage multiple cards: ```typescript const cards = userCards.filter(card => verifyCardNumber(card.number) );
</Accordion>

<Accordion title="Fraud Detection" icon="shield-halved">
Validate card numbers before processing:
```typescript
const checkFraud = (cardNumber: string) => {
  if (!verifyCardNumber(cardNumber)) {
    logSecurityEvent('Invalid card number attempt');
    return false;
  }
  return true;
};

Supported Banks

The function recognizes cards from all major Iranian banks including:
  • بانک ملی ایران
  • بانک سپه
  • بانک صادرات ایران
  • بانک کشاورزی
  • بانک مسکن
  • بانک پست بانک ایران
  • بانک اقتصاد نوین
  • بانک پارسیان
  • بانک سامان
  • And 40+ more banks

Card Number Format

Iranian bank cards use a 16-digit format validated with the Luhn algorithm:
  • First 6 digits: Bank identification number (BIN)
  • Next 9 digits: Account identifier
  • Last digit: Check digit

Type Definition

function verifyCardNumber(cardNumber: string): boolean;
function getBankNameFromCardNumber(cardNumber: string): string;
function extractCardNumbers(text: string): string[];
Always validate card numbers on the server side for security, even if validated on the client.