isCreditCardNumber property

bool get isCreditCardNumber

Determines whether a given string represents a valid credit card number. Credit card numbers must be numeric and follow the Luhn algorithm.

Implementation

bool get isCreditCardNumber {
  var string = this;
  string = string.replaceAll(RegExp('[^0-9]+'), '');
  if (string.length < 13 || string.length > 19) return false;

  var sum = 0;
  int digit;
  int addend;
  var doubled = false;

  for (var i = string.length - 1; i >= 0; i--) {
    digit = int.parse(string.substring(i, i + 1));
    if (doubled) {
      addend = digit * 2;
      if (addend > 9) {
        addend -= 9;
      }
    } else {
      addend = digit;
    }
    sum += addend;
    doubled = !doubled;
  }
  return sum % 10 == 0;
}