begin process at 2010 02 10 12:09:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Commerce

 > VALIDATION DE CARTE DE CREDIT

VALIDATION DE CARTE DE CREDIT


 Description

Entrer le numero de carte de credit et le type de carte de credit et ce code vous diras si il est possible qu'une carte de credit d'un certain type est possible pour le numero donné.

Input: type, numero
Output: True ou False

Source

  • function cc_validate($cc_num, $cc_type) {
  • $mc_mask = array(1 => '51', 2 => '52', 3 => '53', 4 => '54', 5 => '55');
  • $mc_len = array(1 => 16);
  • $visa_mask = array(1 => '4');
  • $visa_len = array(1 => 13, 2 => 16);
  • $amex_mask = array(1 => '34', 2 => '37');
  • $amex_len = array(1 => 15);
  • $disc_mask = array(1 => '6001');
  • $disc_len = array(1 => 16);
  • $jcb_mask = array(1 => '3', 2 => '1800', 3 => '2131');
  • $jcb_len = array(1 => 15, 2 => 16);
  • $cc_mask = array();
  • $cc_len = array();
  • $cc_valid = false;
  • /* STEP 1 VALIDER LEN + PREFIX */
  • switch ($cc_type) {
  • case 'mc':
  • $cc_mask = $mc_mask;
  • $cc_len = $mc_len;
  • break;
  • case 'visa':
  • $cc_mask = $visa_mask;
  • $cc_len = $visa_len;
  • break;
  • case 'amex':
  • $cc_mask = $amex_mask;
  • $cc_len = $amex_len;
  • break;
  • case 'disc':
  • $cc_mask = $disc_mask;
  • $cc_len = $disc_len;
  • break;
  • case 'jcb':
  • $cc_mask = $jcb_mask;
  • $cc_len = $jcb_len;
  • break;
  • default:
  • die('Error, please go back');
  • }
  • $i = 1;
  • while ((isset($cc_mask[$i]))&&(!empty($cc_mask[$i]))&&(!$cc_valid)) {
  • $l = strlen($cc_mask[$i]);
  • $cc_valid = (substr($cc_num, 0, $l)==$cc_mask[$i]);
  • $i++;
  • }
  • if (!$cc_valid) { return false; }
  • $i = 1; $cc_valid = false;
  • while ((isset($cc_len[$i]))&&(!empty($cc_len[$i]))&&(!$cc_valid)) {
  • $cc_valid = (strlen($cc_num)==$cc_len[$i]);
  • $i++;
  • }
  • if (!$cc_valid) { return false; }
  • $cc_valid = false;
  • /* STEP 2 DOUBLE CHAQUES 2 DE 2 ET CHECK MOD 10 */
  • $cc_num = strrev($cc_num);
  • $num_sum = "";
  • for($i = 0; $i < strlen($cc_num); $i++) {
  • $cur_num = substr($cc_num, $i, 1);
  • if($i % 2 == 1) {
  • $cur_num *= 2;
  • } if($cur_num > 9) {
  • $f_num = $cur_num % 10;
  • $s_num = ($cur_num - $f_num) / 10;
  • $cur_num = $f_num + $s_num;
  • }
  • $num_sum += $cur_num;
  • }
  • $cc_valid = ($num_sum % 10 == 0);
  • return $cc_valid;
  • }
  • ?>
function cc_validate($cc_num, $cc_type) {
	$mc_mask = array(1 => '51', 2 => '52', 3 => '53', 4 => '54', 5 => '55');
	$mc_len = array(1 => 16);
	$visa_mask = array(1 => '4');
	$visa_len = array(1 => 13, 2 => 16);
	$amex_mask = array(1 => '34', 2 => '37');
	$amex_len = array(1 => 15);
	$disc_mask = array(1 => '6001');
	$disc_len = array(1 => 16);
	$jcb_mask = array(1 => '3', 2 => '1800', 3 => '2131');
	$jcb_len = array(1 => 15, 2 => 16);

	$cc_mask = array();
	$cc_len = array();
	$cc_valid = false;

	/* STEP 1 VALIDER LEN + PREFIX */
	switch ($cc_type) {
		case 'mc':
			$cc_mask = $mc_mask;
			$cc_len = $mc_len;
			break;
		case 'visa':
			$cc_mask = $visa_mask;
			$cc_len = $visa_len;
			break;
		case 'amex':
			$cc_mask = $amex_mask;
			$cc_len = $amex_len;
			break;
		case 'disc':
			$cc_mask = $disc_mask;
			$cc_len = $disc_len;
			break;
		case 'jcb':
			$cc_mask = $jcb_mask;
			$cc_len = $jcb_len;
			break;
		default:
			die('Error, please go back');
	}
	$i = 1;
	while ((isset($cc_mask[$i]))&&(!empty($cc_mask[$i]))&&(!$cc_valid)) {
		$l = strlen($cc_mask[$i]);
		$cc_valid = (substr($cc_num, 0, $l)==$cc_mask[$i]);
		$i++;
	}
	if (!$cc_valid) { return false; }
	$i = 1; $cc_valid = false;
	while ((isset($cc_len[$i]))&&(!empty($cc_len[$i]))&&(!$cc_valid)) {
		$cc_valid = (strlen($cc_num)==$cc_len[$i]);
		$i++;
	}
	if (!$cc_valid) { return false; }
	$cc_valid = false;
	
	/* STEP 2 DOUBLE CHAQUES 2 DE 2 ET CHECK MOD 10 */
	$cc_num = strrev($cc_num);

	$num_sum = "";
	for($i = 0; $i < strlen($cc_num); $i++) {
		$cur_num = substr($cc_num, $i, 1);

		if($i % 2 == 1) {
			$cur_num *= 2;
		} if($cur_num > 9) {
			$f_num = $cur_num % 10;
			$s_num = ($cur_num - $f_num) / 10;
			$cur_num = $f_num + $s_num;
		}
		$num_sum += $cur_num;
	}
	$cc_valid = ($num_sum % 10 == 0);
	return $cc_valid;
}
?>

 Conclusion

Ce code fonctionne pour Master Card, Visa, American Express, Discovery, JCB (japon).

Il est relativement facile d'ajouter d'autre type de cartes, mais pour ce faire il est important de comprendre le code.

J'espere que vous aimerez.


 Sources de la même categorie

Source avec une capture PHPDEAL APPLICATION DE GESTION D'ENCHÈRES ON-LINE. par Racemul84
Source avec Zip Source avec une capture PANEL PHP/AJAX par mehdi7604
Source avec Zip Source avec une capture FACTURATION EN PHP par liptibilly
Source avec Zip Source avec une capture GIVE ONE. GET TWO. LOGICIEL DE TRADING LIBRE GAGNANT GAGNANT... par Gya
Source avec Zip Source avec une capture MINI BOUTIQUE EN LIGNE ET DEVIS PAR MAIL TRANSMISSION INDIV... par Tom_Crazy

 Sources en rapport avec celle ci

Source avec Zip CLASS DE VALIDATIONS DE DATE, ENTIER, STRING,... par whiskycoke
CONTRÔLE DU N° DE SIRET ET SIERN par akbach
Source avec Zip Source avec une capture GESTIONNAIRE DE CONTACTS LOCALISÉS SUR UNE CARTE GOOGLE MAP par nacedo57400
Source avec Zip LOCALISER LES VISITEURS DE VOTRE SITE SUR UNE CARTE par nlion
Source avec Zip Source avec une capture AJAX MAP EXPLOREUR : FRANCE par djine

Commentaires et avis

Commentaire de webdeb le 16/09/2008 09:00:35

Source très intéressante :)

Commentaire de romain42 le 16/09/2008 15:43:28

En effet c'est assez intéressent mais pourrais tu aporter plus d'explication à ta sources (principalement sur l'algorithme utilisée)?
Il me semble aussi que le Zend Framework propose, par défaut, un validateur pour les cartes de crédit.
Bonne continuation.

romain

Commentaire de zen69 le 16/09/2008 15:56:38

Ah ouais !? loll moi qui a passé une journée à tous comprendre et programmer :P

Explications à venir

Commentaire de romain42 le 16/09/2008 16:00:36

48.2.5. Ccnum
Retourne true si et seulement si $value respecte l'algorithme de Luhn ("module 10") pour les numéros de cartes de crédits
désolé :D
http://framework.zend.com/manual/fr/zend.validate.set.html#zend.validate.set.ccnum

Commentaire de zen69 le 16/09/2008 16:29:36

Bon premierement voici les parametres pour les 3 types de carte principaux:

Type: MASTERCARD
Prefix: 51-55
Longueur: 16
Algo de validation: mod 10

Type: VISA
Prefix: 4
Longueur: 13, 16
Algo de validation: mod 10

Type: AMEX
Prefix: 34 ou 37
Longueur: 15
Algo de validation: mod 10

Etape 1:
On double la valeur de chaque 2 de 2 en commencant par le 2e caractere comme ceci:

49927398716 devient
4(18)9(4)7(6)9(16)7(2)6 (les chiffre qui sont entre parantese le sont simplement pour rendre plus clair l'exemple)

Etape 2:
On additionne en decomposant les sum obtenues en 1 comme ceci:
4+(1+8)+9+(4)+7+(6)+9+(1+6)+7+(2)+6
Somme = 70 (la somme doit etre un multiple de 10 si non la carte n'est pas valide)

Etape 3:
Sum(etape2) % 10 = 0
Le resultat DOIT etre zero








Commentaire de zen69 le 17/09/2008 15:44:15

romain42 :  en effet mais bon celui ci est plus complet car il valide aussi que le bon type de carte a ete choisi... alors au pire aller, c'est pour des faims educative :P

Commentaire de romain42 le 17/09/2008 17:41:04

Exacte et puis c'est toujours intéressent de voir comment ca fonctionne !

Commentaire de tex73 le 02/10/2008 15:01:29

salut!
l'idée de cette source est bonne mais je la trouve incomplete car que fais tu de la date d'expiration de la carte? moi je preconiserais plutot une classe gerant tous les parametres à verifier sur une carte avant acceptation du payement.

Commentaire de zen69 le 16/01/2009 15:52:25

La date ne fait pas partie de cet algorithme.... rendu la je crois que c'est la compagnie tel que Visa qui doit valider l'info.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

CARTE-MERE.COM RECRUTE UN PROGRAMMEUR PHP [ par uSeSoAp ] Bonjour,Tout est dans le titre du topic... Le topic principal de cette appel se trouve <a href="http://www.presence-pc.com/sqlforum/forum2.php3?post=4 Validation de données [ par must ] Salut,j'ai une idée,mais comment la realiserVoudrais faire un livre d'or,mais controle des messages entrésComment faire pour controler les données sai Prob de redirection et validation [ par LeManchot ] Voila jai encoren un souci:jai un formulaire que je valide via un bouton (pr linstant ok) mais par ce meme bouton je dois rediriger la page ou se toru Systeme de carte virtuelle [ par must ] Salut aimerais faire un systeme de carte virtuelle,c'est a dire,prposer images de ma collection,qu'on puisse envoyer message persoCréer un numero d'id 2 petits problemes de formulaire [ par doxid ] voila mon code&lt;select name="carte"&gt;&lt;?phpinclude('connectbase.php');$cartelist = mysql_query('SELECT carte FROM essaie WHERE site = 1;') or di validation de courriel [ par luciano12 ] Bonjour,J'aurais besoin de votre aide pour m'aider à faire la chose suivante:Je voudrais que les visiteurs qui visitent mon site Intenret puissent rem Prob Debutant - Validation d'1 formulaire par Menu Déroulant . [ par marcooo ] Bonjour a tous .J'esplique le problème ... Tout d'abord je tien a dire ke je débute dans le PHP/MySQL.Alors voila, je voudrai créer une sorte de moteu validation mail [ par meth06 ] Bonjour, je cherche a faire une validation d'un mail mais pas la simple validation avec la verif du @ et du . Je voudrais verifier si l'adresse mail e menu déroulant sans bouton de validation [ par scoder ] bonjour,je cherche à faire un menu déroulant que je pourrai utiliser sans bouton de validation, autrement dit simplement en choisissant une valeur de Probleme de formulaire et de variable a reccuperer ds un case [ par Fantomas33 ] Bonjour,Sur ma page j'ai un case. L'action par défaut est de valider le formulaire, l'autre cas est l'action voulue. Voici mon code :&lt;? switch($v


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales