Soyez le premier à donner votre avis sur cette source.
Snippet vu 9 206 fois - Téléchargée 15 fois
function checkCC(n) { var i; n = n+""; var sum = []; var fsum = 0; for (i=0;i<n.length-1;i+=2) { sum.push(parseInt(n.substr(i,1))*2); } for (i=1;i<n.length;i+=2) { fsum += parseInt(n.substr(i,1)); } for (i=0;i<sum.length;i++) { if (sum[i] > 9) { fsum += (sum[i]-(Math.floor(sum[i]/10)*10))+Math.floor(sum[i]/10); } else { fsum += sum[i]; } } return fsum%10==0?true:false; } alert(checkCC("4417123456789113"));
fsum += sum[i] - (sum[i] % 10) + (sum[I] div 10); (où div est la division entière ou euclidienne, j'ignore sa syntaxe en Javascript alors je laisse le "div").
Mais du fait de la spécificité de l'algorithme de Luhn que tu utilises ici on peut encore optimiser plus loin, je te laisse chercher.
Cordialement, Bacterius !
PS : lire "javascript" dans le commentaire avant, faute d'inattention.
"Math.floor(sum[i]/10)*10))"
A éviter : on utilise l'opération modulo (c'est % il me semble en Java).
http://fr.wikipedia.org/wiki/Modulo_(informatique)
"fsum += (sum[i]-(Math.floor(sum[i]/10)*10))+Math.floor(sum[i]/10);"
Ne peut-on pas optimiser ceci comme "fsum += sum[i]-9*Math.floor(sum[i]/10);", sauf erreur de ma part ?
-> Prendre l'habitude de ne jamais croiser du flottant (Math.floor, etc..) et de l'arithmétique, ça ne va pas ensemble. Noter que l'arithmétique est toujours, *toujours*, plus rapide qu'une opération flottante.
Cordialement, Bacterius !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.