J'essaie de valider un numéro de carte de crédit avec Javascript basé sur la formule de Luhn. Je me rends compte qu'il y a des plugins pour ça, mais je voulais essayer tout seul. J'ai inclus un test credit card number qui est censé être valide. Malheureusement, je reçois des résultats invalides. Donc, je suppose que j'ai fait une erreur dans ma logique. Je cherche de l'aide pour voir où j'ai pu me tromper.Erreurs de validation CC (LuhnFormula)
var ccNumber = "5185763365093706";
var finalArray = [];
var lastNumber;
function validateCC() {
// convert CCNumber to array
var ccArray = ccNumber.split("");
// Remove the last number from the array, and store it as a number in a variable
lastNumber = ccArray.pop() * 1;
var ccReverse = Array.prototype.slice.call(ccArray).reverse();
for(var i = 0; i < ccReverse.length; i++) {
var newNumber;
// for all the odd numbers in the
if(i %2 === 0) {
// multiply each odd numbered array item by 2
var newCalc = ccReverse[i] * 2;
var finalCalc;
// check to see if the resulting calculation is greater than 9
(function() {
if(newCalc > 9) {
finalCalc = newCalc - 9;
} else {
finalCalc = newCalc;
}
})();
// push each odd number to the finalArray
finalArray.push(finalCalc);
}
}
}
validateCC();
// Add up all the numbers in the final array
var total = (finalArray.reduce(addArray, 0));
function addArray(a, b) {
return a + b;
}
// The number above should be valid, but it's returning false.
if(total % 10 === lastNumber) {
console.log("Is a valid credit card");
} else {
console.log("Is not a valid credit card");
}
J'ai aussi fortement commenté jsbin: Toute aide est grandement appréciée.
Merci pour les commentaires. Je vais jeter un coup d'oeil et voir comment je peux apporter des améliorations sur la base de l'exemple que vous avez posté. – somecallmejosh