EcommerceDEV. Développement, optimisation et sécurisation des sites de commerce électronique.
arrowAccueil arrow Programmation arrow J2EE/Java(script) arrow Validation d'un numéro de carte de crédit avec JavaScript du côté du client
Jeudi 15 mai 2008
Nom d'utilisateur     Mot de passe      Conserver       Mot de passe perdu ? 
Menu
Accueil
A propos du site
Carte du site
Moteur de recherche
Nouvelles
Contactez-nous
Evénements
Lettres de nouvelles
- - - - - - -
Analyse
Conception
Optimisation
Programmation
Sécurité
Produits/Services
fév 27 2006
Validation d'un numéro de carte de crédit avec JavaScript du côté du client Version imprimable Suggérer par mail
Appréciation des utilisateurs: / 12
FaibleMeilleur 
Programmation - J2EE/Java(script)
Ecrit par Kamal AOUDA   
27-02-2006
Validation d'un numéro de carte de crédit avec JavaScript du côté du client

Dans ce document nous présenterons une fonction  Javascript qui permet de valider le numéro d'une carte de crédit Express, Discover, MasterCard and Visa. Les validations en question portent sur:

 

* La longueur du numéro.

* Les caractères renseignés par l'utilisateur.

* Le préfixe.

* Le contrôle de la clé (check digit).

* La date d'expiration de la carte.

 


Bien entendu cette fonction ne vérifie que la validité de la structure du numéro de carte de crédit. Elle ne vérifie pas si le numéro est réellement attribué à une personne physique ou morale (cela nécessiterait un accès à la base de données de l'établissement émetteur de la carte). Il est important de noter que le bouton de validation présent sur le formulaire HTML n'est pas lié à une URL valide (de ce fait les numéros de cartes de crédit que vous allez valider ne seront pas détournés vers une page web externe à des fins frauduleuses).

 

Si vous souhaitez copier-coller le code source de cette fonction pour l'intégrer à vos applications, nous vous recommandons de vous le procurez en cliquant sur ce lien.

 

NB: Cette fonction a été initialement publiée sur le site planetsourcecode.com

 

<xmp>
//**************************************
// Nom: Validateur de carte de crédit
// Description: Cette fonction valide le numéro d'une carte American Express, Discover, MasterCard and Visa. A l'issue de la validation les numéros de carte renseignés ne seront pas détournés vers une URL externe


// Auteur: vsim, planetsourcecode.com
//
//

//Conditions d'utilisation du code.
//Voir http://www.Planet-Source-Code.com/xq/ASP/txtCodeId.2493/lngWId.2/qx/vb/scripts/ShowCode.htm
//pour plus de détails.
//**************************************

<html>
<head>
<title>Credit Card Validation</title>
<script language="JavaScript">
<!--
/*

Cet algorithme contient 3 fonctions de validation:


validateCard(cardNumber,cardType,cardMonth,cardYear)


Tous les paramètres passés à cette fonction sont des chaînes de caractères . Month & Year c'est à dire le mois et l'année sont spécifiés par l'utilisateur sur le formulaire HTML


cardType peut prendre les valeurs:


'a'  American Express
'd'  Discover
'm' MasterCard
'v' Visa


Description:

 

La fonction fait appel à la formule de LUHN (Mod 10) pour valider le numéro de carte. Elle retourne:

 

true si le numéro de la carte est valide compte tenu de la date d'expiration.
false dans les autres cas.


Les fonctions invoquées par la fonction principale sont:


mod10( cardNumber )
 

Son paramètre est une chaîne de caractère qui correspond au numéro de la carte. Ce numéro est vérifié par le biais de la formule modulo 10 pour contrôler le numéro de clé (check digit)
 

Elle retourne:

 

true si la clé est valide.
false dans les autres cas.


expired( cardMonth, cardYear )

 

Cette fonction reçoit en paramètres la date d'expiration (mois, année). Elle vérifie que la date du jour est antérieure à la date d'expiration. Elle retourne
 

true si la carte a expiré.
false dans les autres cas.

 

Voici à présent le code de la fonction:
*/
function mod10( cardNumber ) { // LUHN Formula for validation of credit card numbers.
var ar = new Array( cardNumber.length );
var i = 0,sum = 0;


for( i = 0; i < cardNumber.length; ++i ) {
ar[i] = parseInt(cardNumber.charAt(i));
}
for( i = ar.length -2; i >= 0; i-=2 ) { // you have to start from the right, and work back.
ar[i] *= 2; // every second digit starting with the right most (check digit)
if( ar[i] > 9 ) ar[i]-=9; // will be doubled, and summed with the skipped digits.
} // if the double digit is > 9, add those individual digits together


for( i = 0; i < ar.length; ++i ) {
sum += ar[i]; // if the sum is divisible by 10 mod10 succeeds
}
return (((sum%10)==0)?true:false);
}


function expired( month, year ) {
var now = new Date(); // this function is designed to be Y2K compliant.
var expiresIn = new Date(year,month,0,0,0); // create an expired on date object with valid thru expiration date
expiresIn.setMonth(expiresIn.getMonth()+1); // adjust the month, to first day, hour, minute & second of expired month
if( now.getTime() < expiresIn.getTime() ) return false;
return true; // then we get the miliseconds, and do a long integer comparison
}


function validateCard(cardNumber,cardType,cardMonth,cardYear) {
if( cardNumber.length == 0 ) { //most of these checks are self explanitory
alert("Please enter a valid card number.");
return false;
}
for( var i = 0; i < cardNumber.length; ++i ) { // make sure the number is all digits.. (by design)
var c = cardNumber.charAt(i);


if( c < '0' || c > '9' ) {
alert("Please enter a valid card number. Use only digits. Do not use spaces or hyphens.");
return false;
}
}
var length = cardNumber.length; //perform card specific length and prefix tests


switch( cardType ) {
case 'a':


if( length != 15 ) {
alert("Please enter a valid American Express Card number.");
return;
}
var prefix = parseInt( cardNumber.substring(0,2));


if( prefix != 34 && prefix != 37 ) {
alert("Please enter a valid American Express Card number.");
return;
}
break;
case 'd':


if( length != 16 ) {
alert("Please enter a valid Discover Card number.");
return;
}
var prefix = parseInt( cardNumber.substring(0,4));


if( prefix != 6011 ) {
alert("Please enter a valid Discover Card number.");
return;
}
break;
case 'm':


if( length != 16 ) {
alert("Please enter a valid MasterCard number.");
return;
}
var prefix = parseInt( cardNumber.substring(0,2));


if( prefix < 51 || prefix > 55) {
alert("Please enter a valid MasterCard Card number.");
return;
}
break;
case 'v':


if( length != 16 && length != 13 ) {
alert("Please enter a valid Visa Card number.");
return;
}
var prefix = parseInt( cardNumber.substring(0,1));


if( prefix != 4 ) {
alert("Please enter a valid Visa Card number.");
return;
}
break;
}
if( !mod10( cardNumber ) ) { // run the check digit algorithm
alert("Sorry! This is not a valid credit card number.");
return false;
}
if( expired( cardMonth, cardYear ) ) { // check if entered date is already expired.
alert("Sorry! The expiration date you have entered would make this card invalid.");
return false;
}

return true; // at this point card has not been proven to be invalid
}
//-->
</script>
<style type="text/css">
P { font-family:arial,verdana;font-size:10pt;font-weight:bold; color: #043829 }
</style>
</head>
<body bgcolor="ccfff">
<form action="URLTOPROCESSDATA" method="POST" enctype="application/x-www-form-urlencoded" name="ccform" onsubmit="return validateCard(this.cardNumber.value,this.cardType.value,this.cardMonth.value,this.cardYear.value);">
<table cellspacing="5" cellpadding="2" bgcolor="#DA9D67">
<tr>
<td align="right" valign="middle" nowrap><p>Select Card Type:</p></td>
<td valign="bottom" nowrap>
<select name="cardType">
<option value="a"> American Express
<option value="d"> Discover
<option value="m"> MasterCard
<option value="v"> Visa
</select>
</td>
</tr>
<tr>
<td align="right" valign="middle" nowrap><p>Enter Card Number:</p></td>
<td valign="bottom" nowrap>
<p><input type="Text" name="cardNumber" size="17" maxlength="16">&nbsp;&nbsp;example:&nbsp;<font size=-1><i>( 1234567890123456 )</i></i></font></p>
</td>
</tr>
<tr>
<td align="right" valign="middle" nowrap><p>Select Expiration Date:</p></td>
<td valign="bottom" nowrap>
<p>
<select name="cardMonth">
<option value="01"> 01
<option value="02"> 02
<option value="03"> 03
<option value="04"> 04
<option value="05"> 05
<option value="06"> 06
<option value="07"> 07
<option value="08"> 08
<option value="09"> 09
<option value="10"> 10
<option value="11"> 11
<option value="12"> 12
</select>
<select name="cardYear">
<option value="1999"> 99
<option value="2000"> 00
<option value="2001"> 01
<option value="2002"> 02
<option value="2003"> 03
<option value="2004"> 04
<option value="2005"> 05
<option value="2006"> 06
<option value="2007"> 07
<option value="2008"> 08
<option value="2009"> 09
<option value="2010"> 10
</select>
&nbsp;&nbsp;example:&nbsp;<font size=-1><i>( MM YY )</i></i></font>
</p>
</td>
</tr>
<tr>
<td colspan="2" align="CENTER">
<input type="Submit" name="submit" value="Submit">&nbsp;<input type="reset" value="Reset">
</td>
</tr>
</table>
</form>
</body>
</html>


</xmp>
 

 

Dernière mise à jour : ( 27-02-2006 )
< Précédent   Suivant >
Moteur de recherche
Recommander ce site
Collaboration
Téléchargements
Derniers événements
Aucun événement
Sondages

Quelle est la meilleure technologie pour programmer un site e-commerce ?

  
Blogs Ecommerce
Blog de capitaine commerce
top

Ce site a été crée avec le CMS Mambo. Un logiciel gratuit disponible sous licence GPL.

Copyright Ecommerce DEV 2006.

Hosted by SiteGround