Développement, PHP, Tutoriels : fonction de Luhn en php
Flux RSS du post Ecrit par Francis Hilaire, le Dimanche 9 mars, 2008
Après avoir regarder du côté de wikipédia, j’ai pu facilement construire la fonction de Luhn permettant entre autre de vérifier des numéros de carte bancaire.
//Fonction algorithme de Luhn
function isCB($numCB)
{
//retour
$ret = false;
//longueur de la chaine $numCB
$lengthCB = strlen($numCB);
//resultat de l'addition de tous les chiffres
$tot = 0;
for($i=$lengthCB-1;$i>=0;$i--)
{
$digit = substr($numCB, $i, 1);
if (($i % 2) == 0)
{
$digit = $digit*2;
if ($digit>9)
{
$digit = $digit-9;
}
}
$tot += $digit;
}
if (($tot % 10) == 0)
{
$ret=true;
}
return $ret;
}
Dernière modification le Dimanche 16 mars, 2008
Moi, j’utilise perso une version plus courte (je n’aime pas beaucoup le “-9″ dans l’algo)
//Fonction algorithme de Luhn
function isCB($numCB)
{
//longueur de la chaine $numCB
$lengthCB = strlen($numCB);
//resultat de l’addition de tous les chiffres
$tot = 0;
for($i=$lengthCB-1;$i>=0;$i–)
{
$digit = $numCB[$i];
$tot += ($i % 2)?((2*$digit)%10 + (2*$digit)/10):$digit;
}
return !($tot % 10);
}
13 mars, 2008 à 13:38
Moi c’est le (2*$digit)/10 qui me gène, ça donne forcément un float lorsque tu fais par exemple $digit = 1; Si tu travailles comme ça dans un autre language tel que Java ou C# ça ne passera jamais. Bon il est vrai que là on est censé recevoir un int et qu’on l’interprète comme un string donc bon…
Le -9 est déjà plus mathématique car on a forcément un chiffre compris entre 0 et 18 lorsqu’on multiplie par 2 $digit et qu’il correspond exactement à ce que l’algorithme doit faire.
C’est clair, c’est plus rapide, mais pas à comprendre pour un néophyte…
13 mars, 2008 à 18:17