Développement, PHP, Tutoriels : fonction de Luhn en php

feed 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

2 Commentaires pour “ fonction de Luhn en php”

  1. Xfigpower a dit :

    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

  2. Francis Hilaire a dit :

    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

Nouveau Commentaire

Laissez une réponse

(requis)

(requis)

XHTML: Vous pouvez utilisez ces balises: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>