getCardType function

CardType getCardType(
  1. String cardNumber
)

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;
}