validNumber method

bool validNumber(
  1. String? cardNumber
)

Validates the number of the card Returns true if the number is valid. Returns false otherwise

Implementation

bool validNumber(String? cardNumber) {
  if (cardNumber == null) {
    cardNumber = this.number;
  }
  if (StringUtils.isEmpty(cardNumber)) return false;

  // Remove all non digits
  var formattedNumber =
      cardNumber!.trim().replaceAll(new RegExp(r'[^0-9]'), '');

  // Verve card needs no other validation except it matched pattern
  if (CardType.fullPatternVerve.hasMatch(formattedNumber)) {
    return true;
  }

  //check if formattedNumber is empty or card isn't a whole positive number or isn't Luhn-valid
  if (StringUtils.isEmpty(formattedNumber) ||
      !CardUtils.isWholeNumberPositive(cardNumber) ||
      !_isValidLuhnNumber(cardNumber)) return false;

  // check type lengths
  if (CardType.americanExpress == _type) {
    return formattedNumber.length == CardType.maxLengthAmericanExpress;
  } else if (CardType.dinersClub == _type) {
    return formattedNumber.length == CardType.maxLengthDinersClub;
  } else {
    return formattedNumber.length == CardType.maxLengthNormal;
  }
}