CreditCardZend_Validate_CreditCard permet de valider si une valeur est susceptible
de représenter un numéro de carte de crédit.
Une carte de crédit contient plein de données, incluant un hologramme, un numéro de compte,
un logo, une date d'expiration, un code de sécurité et le nom du détenteur. L'algorithme
qui vérifie la combinaison de ces données n'est connu que des entreprises délivrant les cartes
et devrait être vérifié lors d'un paiement. Cependant, il est utile de savoir si le numéro de
la carte est valable avant d'effectuer de telles vérifications complexes.
Zend_Validate_CreditCard vérifie simplement que le numéro est bien formé.
Dans les cas où vous possederiez un service capable d'effectuer des vérifications complètes,
Zend_Validate_CreditCard vous permet de passer une fonction de rappel
à utiliser si le numéro a été vérifié comme valide. Le retour de la fonction de rappel
servira alors de retour général du validateur.
Les institutions suivantes sont acceptées:
American ExpressChina UnionPayDiners Club Card BlancheDiners Club InternationalDiners Club US & CanadaDiscover CardJCBLaserMaestroMasterCardSoloVisaVisa ElectronInstitutions non validesBankcard et Diners Club
enRoute n'existent plus, elles sont donc considérées non valides.
Switch est rattaché à Visa et est donc
considérée comme non valide.
Options supportées par Zend_Validate_CreditCard
Les options suivantes sont supportées par
Zend_Validate_CreditCard :
service : une fonction de rappel
vers un service en ligne qui sera utilisé en plus pour la validation.
type : le type de carte crédit
qui sera validée. Voir ci-dessous la liste des institutions pour de plus
amples détails.
Utilisation classique
Il y a plusieurs institutions qui peuvent être validées par
Zend_Validate_CreditCard. Par défaut, toutes les institutions
connues sont acceptées:
isValid($input)) {
// input semble valide
} else {
// input est invalide
}
]]>
L'exemple ci-dessus valide le numéro pour toutes les institutions connues.
Accepter seulement certains types de cartes
Il peut arriver que vous ne vouliez valider que certains types de cartes plutôt que
toutes les institutions connues. Zend_Validate_CreditCard permet
ceci.
Pour utiliser une limite, spécifiez les institutions accéptées à l'initialisation ou après,
grâce à setType(). Plusieurs arguments sont utilisables.
Vous pouvez préciser une seule institution:
Plusieurs institutions se précisent au moyen d'un tableau:
Et comme pour tout validateur, vous pouvez passer un tableau global ou un objet
Zend_Config. Dans ce cas, les institutions se précisent au moyen
de la clé type:
array(Zend_Validate_CreditCard::AMERICAN_EXPRESS)
));
]]>
Constante représentant les institutionsInstitutionConstanteAmerican ExpressAMERICAN_EXPRESSChina UnionPayUNIONPAYDiners Club Card BlancheDINERS_CLUBDiners Club InternationalDINERS_CLUBDiners Club US & CanadaDINERS_CLUB_USDiscover CardDISCOVERJCBJCBLaserLASERMaestroMAESTROMasterCardMASTERCARDSoloSOLOVisaVISAVisa ElectronVISA
Vous pouvez aussi configurer les institutions valides après la construction,
au moyen des méthodes
setType(), addType() et
getType().
setType(array(
Zend_Validate_CreditCard::AMERICAN_EXPRESS,
Zend_Validate_CreditCard::VISA
));
]]>Institution par défaut
Si vous ne précisez pas d'institution à la construction, alors ALL
sera utilisée, et donc toutes les institutions seront utilisées.
Dans ce cas, utiliser addType() ne sert à rien.
Validation par fonction de rappel
Comme déja dit, Zend_Validate_CreditCard ne valide que le numéro
de la carte. Heureusement, certaines institutions proposent des
APIs pour valider des numéros de carte de crédit qui ne sont
pas publiques. Ces services sont très souvent payants, ainsi cette vérification est par
défaut désactivée.
Lorsque vous avez accès à de telles APIs, vous pouvez les utiliser
comme fonctions additionnelles à Zend_Validate_CreditCard et ainsi
augmenter la sécurité de la validation.
Pour ce faire, vous devez simplement préciser une fonction de rappel qui sera appelée
après que la validation "classique" ait réussi. Ceci évite un appel à l'
API avec un numéro de toute façon non valide et augmentera ainsi
les performances de la validation et donc de l'application.
setService() et
getService() sont utilisée pour la fonction de rappel.
La clé de configuration à utiliser, si vous le souhaitez, est 'service'
(à la construction). Des détails peuvent être trouvés sur la documentation du validateurCallback.
setService(array($service, 'checkOnline'));
]]>
Ici le service sera appelé avec le numéro de carte comme premier paramètre,
et les types accéptés comme second.