Vérifier la validité d'un numéro d'une credit card/amex/mastercard

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 304 fois - Téléchargée 15 fois

Contenu du snippet

Cette fonction permet de vérifier la validité d'un numéro d'une Credit Card/Amex/Mastercard.
Utilise dans vos solutions d'ecommerce lors de la validation des infos de paiement.

Source / Exemple :


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"));

Conclusion :


Le numéro de CB fournis en exemple correspond à une carte d'exemple de First USA Bank.

A voir également

Ajouter un commentaire

Commentaires

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

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.