VÉRIFIER LA VALIDITÉ D'UN NUMÉRO D'UNE CREDIT CARD/AMEX/MASTERCARD

Signaler
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Bacterius
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52762-verifier-la-validite-d-un-numero-d-une-credit-card-amex-mastercard

Bacterius
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
6
Noter que si l'on utilise l'opération modulo la deuxième optimisation dont je parlais devient sans objet. On obtient alors :

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.
Bacterius
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
6
Salut,
"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 !