Créa-blog

Ressources pour développeur web

L’algorithme de Luhn en PHP

Accueil PHP 8 L’algorithme de Luhn en PHP

L’algorithme de Luhn, également connu sous le nom de formule de Luhn ou modulo 10, est une méthode de validation utilisée pour vérifier la validité des numéros d’identification tels que les numéros de cartes de crédit, les numéros de comptes bancaires, les numéros d’assurance sociale, etc.

Il a été inventé par Hans Peter Luhn, un scientifique et ingénieur allemand, en 1954, alors qu’il travaillait chez IBM. L’objectif principal de cet algorithme est de détecter les erreurs de saisie et les fautes de frappe lors de la saisie de ces numéros.

Qu’est-ce que l’algorithme de Luhn ?

Lorsque vous traitez des informations financières en ligne ou que vous utilisez une carte de crédit pour effectuer des achats, il est probable que vous ayez entendu parler de l’algorithme de Luhn. Ce petit mais puissant algorithme est utilisé pour valider les numéros de cartes de crédit, de comptes bancaires et même de numéros de sécurité sociale.

L’objectif principal de cet algorithme est de détecter les erreurs de saisie et les fautes de frappe lors de la saisie de ces numéros. En utilisant une formule mathématique relativement simple, l’algorithme de Luhn peut déterminer si un numéro donné est potentiellement valide ou invalide. Cependant, il n’a pas été conçu pour être une fonction de hachage sécurisée cryptologiquement ; il protège contre les erreurs aléatoires, pas contre les attaques malveillantes.

Comment fonctionne l’algorithme de Luhn ?

L’algorithme de Luhn fonctionne en plusieurs étapes simples :

  1. Inversion du numéro : Tout d’abord, les chiffres du numéro sont inversés. Par exemple, si notre nombre était 123456789, il devient 987654321.
  2. Multiplication des chiffres pairs : Les chiffres à des positions impaires (en partant de la droite) sont laissés intacts, tandis que les chiffres à des positions paires sont multipliés par 2. Si le résultat de cette multiplication est supérieur à 9, il est réduit en soustrayant 9. Donc, pour notre exemple 987654321, seul 8, 6, 4 et 2 seront multiplié par 2. 2×8=16 auquel nous soustrayons 9 ce qui nous donnera 7, et ainsi de suite.
  3. Addition des chiffres : Ensuite, nous additionnons tous les chiffres du numéro résultant, y compris ceux qui ont été multipliés par 2 et réduits.
  4. Vérification de la validité : Enfin, si la somme totale obtenue est un multiple de 10, alors le numéro est considéré comme valide selon l’algorithme de Luhn. Sinon, il est considéré comme invalide.

Prenons un exemple concret

Pour cet exemple, nous allons prendre le numéro 123456.

  1. Inversion du nombre : 123456 devient 654321.
  2. Multiplication des chiffres pairs : Les chiffres à des positions paires sont 5, 3, et 1. Nous les multiplions par 2, ce qui donne 10, 6, et 2.
  3. Réduction des chiffres supérieurs à 9 : Seul le chiffre 10 est supérieur à 9, donc nous lui soustrayons 9 soit 10-9=1
  4. Addition des chiffres : 6 + 1 + 4 + 6 + 2 + 2 = 21.
  5. Vérification de la validité : 21 n’est pas un multiple de 10, donc le numéro « 123456 » n’est pas valide selon l’algorithme de Luhn.

Ainsi, dans cet exemple, le numéro 123456 ne passerait pas la validation de l’algorithme de Luhn.

Exemple d’application de l’algorithme de Luhn en PHP

Maintenant que nous avons une idée générale de comment fonctionne l’algorithme de Luhn, voyons comment l’implémenter en PHP :

<?php

function luhnValidation($number) {
    // Étape 1: Inverser le numéro
    $number = strrev($number);
    
    $sum = 0;
    for ($i = 0, $j = strlen($number); $i < $j; $i++) {
        // Étape 2: Multiplier les chiffres pairs
        $digit = (int) $number[$i];
        if ($i % 2 == 1) {
            $digit *= 2;
            if ($digit > 9) {
                $digit -= 9;
            }
        }
        // Étape 3: Addition des chiffres
        $sum += $digit;
    }
    
    // Étape 4: Vérification de la validité
    return $sum % 10 === 0;
}

// Exemple d'utilisation
$creditCardNumber = "1234567890123456";
if (luhnValidation($creditCardNumber)) {
    echo "Le numéro de carte de crédit est valide.";
} else {
    echo "Le numéro de carte de crédit est invalide.";
}

?>

Dans cet exemple, la fonction luhnValidation() prend en paramètre un numéro et retourne true si le numéro est valide selon l’algorithme de Luhn, sinon elle retourne false.

Fonctionnement du code

  1. La fonction luhnValidation($number) prend un numéro en entrée et retourne true s’il est valide selon l’algorithme de Luhn, sinon elle retourne false.
  2. La première étape de l’algorithme consiste à inverser le numéro de carte de crédit. Cela est fait en utilisant la fonction strrev() qui inverse une chaîne de caractères.
  3. Ensuite, une boucle for est utilisée pour parcourir chaque chiffre du numéro inversé. Pour chaque chiffre, on fait les étapes suivantes :
    • a. On convertit le caractère en chiffre en utilisant (int) $number[$i].
    • b. Si l’indice de la boucle est pair (donc position impaire à partir de la droite), on multiplie le chiffre par 2.
    • c. Si le résultat de la multiplication est supérieur à 9, on soustrait 9.
    • d. On additionne le chiffre obtenu à la variable $sum.
  4. Une fois que tous les chiffres ont été traités, on vérifie si la somme totale $sum est un multiple de 10 en utilisant l’opérateur modulo %. Si c’est le cas, la fonction retourne true, indiquant que le numéro est valide selon l’algorithme de Luhn. Sinon, elle retourne false.
  5. Enfin, un exemple d’utilisation est fourni où la fonction est appelée avec un numéro de carte de crédit 1234567890123456. Si la fonction retourne true, cela signifie que le numéro est valide selon l’algorithme de Luhn et un message indiquant que le numéro de carte de crédit est valide est affiché. Sinon, un message indiquant que le numéro de carte de crédit est invalide est affiché.

L’algorithme de Luhn est un outil crucial dans la validation des numéros d’identification dans de nombreux domaines, en particulier dans les transactions financières en ligne. Comprendre comment il fonctionne et être capable de l’implémenter vous-même dans votre code peut être extrêmement utile pour garantir l’intégrité et la sécurité des données. En utilisant des exemples concrets en PHP, nous avons exploré les tenants et les aboutissants de cet algorithme, vous permettant ainsi de l’utiliser efficacement dans vos propres projets.