isLuhnValid.js 628 B

123456789101112131415161718192021222324252627282930
  1. import assertString from './util/assertString';
  2. export default function isLuhnValid(str) {
  3. assertString(str);
  4. var sanitized = str.replace(/[- ]+/g, '');
  5. var sum = 0;
  6. var digit;
  7. var tmpNum;
  8. var shouldDouble;
  9. for (var i = sanitized.length - 1; i >= 0; i--) {
  10. digit = sanitized.substring(i, i + 1);
  11. tmpNum = parseInt(digit, 10);
  12. if (shouldDouble) {
  13. tmpNum *= 2;
  14. if (tmpNum >= 10) {
  15. sum += tmpNum % 10 + 1;
  16. } else {
  17. sum += tmpNum;
  18. }
  19. } else {
  20. sum += tmpNum;
  21. }
  22. shouldDouble = !shouldDouble;
  23. }
  24. return !!(sum % 10 === 0 ? sanitized : false);
  25. }