Luhn Validator

Run Settings
LanguageJavaScript
Language Version
Run Command
//Information Source // https://www.freeformatter.com/credit-card-number-generator-validator.html function luhnValidate( target ){ if( target ){ target = "" + target; var digits = target.split(""); var lastDigit = parseInt(digits.splice(digits.length-1)[0]); var result = digits.reverse() .map(function(item,index){ var result = parseInt(item); if( (index + 1)%2 == 1 ){ result = result * 2; } if( result > 9 ){ result -= 9; } return result; }) .reduce(function(accumulator,item){ return accumulator + item; },0); return modulo(result,10) === lastDigit; } else { return false; } } function modulo( target, mod ){ if( target && mod ){ return (mod-(target%mod))%mod; } else { return target; } } var VisaClassification = { classification : 'VISA', length : [13,16,19], regex : /^4.+/ }; var MastercardClassification = { classification : 'MASTER', length : [16], regex : /^5[1-5].+/ }; function classify( target, classification ){ if( target && classification ){ target = ""+target; if( classification.length && classification.regex ){ var length = classification.length; if( !Array.isArray(length) ){ length = [].push(length); } var lengthTest = length. map(function(item){ return target.length === item; }). reduce(function(result,item){ return result || item; },false); var iinTest = classification.regex.test(target); if( lengthTest && iinTest ){ return classification.classification; } else { return null; } } } } var classifications = [ VisaClassification, MastercardClassification ]; var targets = [ "4556737586899855", "4111111111111111", 4444333322221111, "5105105105105100", "5504182320730498" ]; targets.forEach(function(target){ var classified = classifications.map(function(classification){ return classify(target, classification); }).filter(function(item){return item}); console.log( target, " ", (luhnValidate(target))?"Valid":"Invalid", classified); });
Editor Settings
Theme
Key bindings
Full width
Lines