getCardType function
Implementation
CardType getCardType(String cardNumber) {
// Remove all the spaces from the card number
cardNumber = cardNumber.trim().replaceAll(' ', '');
if (cardNumber.isEmpty) {
return CardType.other;
}
if (_rAmericanExpress.hasMatch(cardNumber)) {
return CardType.americanExpress;
} else if (_rMasterCard.hasMatch(cardNumber)) {
return CardType.masterCard;
} else if (_rElo.hasMatch(cardNumber)) {
// Elo BINs overlap Visa (4011 78/79) and Discover (65...) prefixes,
// so this check must come before both.
return CardType.elo;
} else if (_rVisa.hasMatch(cardNumber)) {
return CardType.visa;
} else if (_rDinersClub.hasMatch(cardNumber)) {
return CardType.dinersClub;
} else if (_rRupay.hasMatch(cardNumber)) {
// RuPay and Discover overlap on the `60` prefix: 6011 is Discover,
// every other 60/6521/6522 card is RuPay.
if (_rDiscover6011.hasMatch(cardNumber)) {
return CardType.discover;
} else {
return CardType.rupay;
}
} else if (_rDiscover.hasMatch(cardNumber)) {
return CardType.discover;
} else if (_rJcb.hasMatch(cardNumber)) {
return CardType.jcb;
} else if (_rMaestro.hasMatch(cardNumber)) {
return CardType.maestro;
}
return CardType.other;
}