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

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 29 janv. 2011 à 12:27
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 29 janv. 2011 à 12:33
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 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 janv. 2011 à 12:33
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 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 janv. 2011 à 12:27
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 !
Rejoignez-nous