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