L’algorithme de Luhn : vérifier mathématiquement un SIRET (Excel et Google Sheets)
L’algorithme de Luhn vérifie la cohérence interne d’un SIRET : en partant de la gauche, on double un chiffre sur deux (les rangs impairs), on retranche 9 aux résultats supérieurs à 9, on additionne les 14 valeurs obtenues et le total doit être un multiple de 10. Un SIRET qui échoue à ce test est forcément faux ; un SIRET qui le réussit a seulement un format plausible, car le test ne consulte aucune base. Dans Excel comme dans Google Sheets, une formule d’une ligne à base de SOMMEPROD reproduit ce calcul sur chaque cellule. Une seule famille d’exceptions existe, les établissements de La Poste (SIREN 356 000 000), pour lesquels la somme brute des chiffres doit être un multiple de 5. Pour aller au-delà du format et confirmer l’existence de chaque numéro dans la base Sirene, un outil comme Trouve-ton-siret.com contrôle un fichier entier de SIRET en quelques minutes.
Ce que vérifie vraiment une clé de Luhn
L’algorithme de Luhn est une formule de somme de contrôle imaginée par Hans Peter Luhn, ingénieur chez IBM, qui l’a déposée en 1954 (brevet américain délivré en 1960). La norme ISO/IEC 7812 l’impose sur les numéros de cartes bancaires, et l’INSEE l’applique aux identifiants du répertoire Sirene, créé par le décret du 14 mars 1973. Le principe tient en deux phrases : le dernier chiffre d’un SIREN (le 9e) et le dernier chiffre d’un SIRET (le 14e) ne sont pas choisis au hasard, ils sont calculés pour que l’ensemble du numéro respecte une règle arithmétique. Si une saisie modifie un seul chiffre, la règle casse et le numéro est immédiatement repéré comme faux.
Ce mécanisme détecte 100 % des erreurs portant sur un chiffre isolé et la quasi-totalité des inversions de deux chiffres voisins (seule l’inversion 09/90 lui échappe). C’est précisément le type d’erreur qu’une saisie manuelle produit. Pour comprendre ce que contiennent les 14 chiffres, bloc par bloc, un autre article détaille la structure du numéro. Ici, nous nous concentrons sur le calcul lui-même.
L’algorithme pas à pas sur un SIRET
Un SIRET compte 14 chiffres. La description classique de Luhn part de la droite et double un chiffre sur deux à partir de l’avant-dernier. Comme 14 est un nombre pair, cela revient exactement à doubler les chiffres de rang impair en partant de la gauche (1er, 3e, 5e, jusqu’au 13e), ce qui est bien plus simple à suivre dans un tableur.
- Numérotez les chiffres de 1 à 14, de gauche à droite.
- Doublez chaque chiffre de rang impair ; laissez les chiffres de rang pair tels quels.
- Si un doublement dépasse 9, retranchez 9 (14 devient 5, 18 devient 9). Cela revient à additionner les deux chiffres du produit.
- Additionnez les 14 valeurs obtenues.
- Si le total est un multiple de 10, la clé est correcte. Sinon, le numéro est faux.
Exemple déroulé chiffre par chiffre
Prenons le SIRET fictif 429 173 602 00021 (SIREN 429 173 602, NIC 00021), donné à titre d’exemple.
| Rang (depuis la gauche) | Chiffre | Opération | Valeur retenue |
|---|---|---|---|
| 1 | 4 | × 2 = 8 | 8 |
| 2 | 2 | inchangé | 2 |
| 3 | 9 | × 2 = 18, moins 9 | 9 |
| 4 | 1 | inchangé | 1 |
| 5 | 7 | × 2 = 14, moins 9 | 5 |
| 6 | 3 | inchangé | 3 |
| 7 | 6 | × 2 = 12, moins 9 | 3 |
| 8 | 0 | inchangé | 0 |
| 9 | 2 | × 2 = 4 | 4 |
| 10 | 0 | inchangé | 0 |
| 11 | 0 | × 2 = 0 | 0 |
| 12 | 0 | inchangé | 0 |
| 13 | 2 | × 2 = 4 | 4 |
| 14 | 1 | inchangé (chiffre de clé) | 1 |
| Total | 40 | ||
Le total vaut 40, multiple de 10 : la clé est correcte. Remplacez le 7 du 5e rang par un 1 et le total tombe à 37, le numéro est rejeté. Inversez les deux premiers chiffres (24 au lieu de 42) et le total passe à 38, rejeté également. C’est toute la valeur du test : une erreur de frappe ordinaire ne passe pas.
Et pour un SIREN seul ?
Le SIREN compte 9 chiffres, un nombre impair : en partant de la droite, on double cette fois les chiffres de rang pair depuis la gauche (2e, 4e, 6e, 8e). Sur 429 173 602, les chiffres de rang pair 2, 1, 3 et 0 deviennent 4, 2, 6 et 0 (somme 12) ; ceux de rang impair, 4, 9, 7, 6 et 2, s’additionnent à 28. Total 40, clé correcte. Le 5e chiffre du NIC, lui, est la clé du SIRET entier : il se calcule sur les 14 chiffres et non sur les 5 du NIC, ce qui explique qu’un SIREN valide accolé à un NIC inventé donne, neuf fois sur dix, un SIRET faux.
La formule Excel à copier
La formule ci-dessous reproduit les cinq étapes dans une seule cellule. Elle suppose que le SIRET se trouve en A2, stocké au format Texte : un SIRET commençant par 0 perdrait son zéro s’il était stocké en nombre, et la formule le compterait comme 13 chiffres.
=SI(NBCAR(A2)<>14;"14 chiffres attendus";SI(MOD(SOMMEPROD(MOD(STXT(A2;LIGNE(INDIRECT("1:14"));1)*(1+MOD(LIGNE(INDIRECT("1:14"));2));10)+ENT(STXT(A2;LIGNE(INDIRECT("1:14"));1)*(1+MOD(LIGNE(INDIRECT("1:14"));2))/10));10)=0;"Clé OK";"Clé KO"))
Lecture : STXT extrait chaque chiffre un par un, LIGNE(INDIRECT("1:14")) fournit les rangs 1 à 14, le facteur 1+MOD(rang;2) vaut 2 pour les rangs impairs et 1 pour les rangs pairs, puis MOD(x;10)+ENT(x/10) additionne les deux chiffres du produit (18 devient 1+8, soit 9), ce qui équivaut à retrancher 9. SOMMEPROD fait la somme et le MOD final teste le multiple de 10. Dans un Excel en anglais, remplacez SI, NBCAR, STXT, LIGNE, SOMMEPROD et ENT par IF, LEN, MID, ROW, SUMPRODUCT et INT, et les points-virgules par des virgules. Sur Excel 365, SEQUENCE(14) peut remplacer LIGNE(INDIRECT("1:14")).
Copiée vers le bas, cette formule contrôle une colonne entière instantanément, sans macro ni connexion internet. Pour un SIREN de 9 chiffres en A2, la version correspondante double les rangs pairs :
=SI(MOD(SOMMEPROD(MOD(STXT(A2;LIGNE(INDIRECT("1:9"));1)*(2-MOD(LIGNE(INDIRECT("1:9"));2));10)+ENT(STXT(A2;LIGNE(INDIRECT("1:9"));1)*(2-MOD(LIGNE(INDIRECT("1:9"));2))/10));10)=0;"Clé OK";"Clé KO")
La même formule dans Google Sheets
Google Sheets accepte les noms de fonctions en français et le point-virgule comme séparateur : la formule Excel fonctionne telle quelle dans la plupart des cas. Pour garantir l’évaluation matricielle, enveloppez-la dans ARRAYFORMULA et profitez de SEQUENCE(14), plus lisible que LIGNE(INDIRECT("1:14")) :
=ARRAYFORMULA(SI(NBCAR(A2)<>14;"14 chiffres attendus";SI(MOD(SOMMEPROD(MOD(STXT(A2;SEQUENCE(14);1)*(1+MOD(SEQUENCE(14);2));10)+ENT(STXT(A2;SEQUENCE(14);1)*(1+MOD(SEQUENCE(14);2))/10));10)=0;"Clé OK";"Clé KO")))
Pour aller plus loin (contrôle de toute une colonne en un clic, mise en évidence des rejets, appel à l’API Sirene depuis le tableur), la version Google Sheets avec son script Apps Script détaille le code commenté et les quotas à surveiller avant de changer d’outil.
L’exception La Poste : SIREN 356 000 000
Une seule entreprise déroge à la règle : La Poste, SIREN 356 000 000. Le SIREN lui-même respecte Luhn, mais ses milliers d’établissements ont reçu des NIC attribués selon une logique antérieure, et la documentation de l’INSEE décrit pour eux une règle de substitution : le SIRET d’un établissement de La Poste est réputé correct si la somme brute de ses 14 chiffres est un multiple de 5. Le siège, 356 000 000 00048, passe quant à lui le test de Luhn classique. Un contrôle complet doit donc accepter l’une ou l’autre condition dès que le SIRET commence par 356000000.
La formule Excel qui intègre cette exception renvoie VRAI ou FAUX :
=OU(MOD(SOMMEPROD(MOD(STXT(A2;LIGNE(INDIRECT("1:14"));1)*(1+MOD(LIGNE(INDIRECT("1:14"));2));10)+ENT(STXT(A2;LIGNE(INDIRECT("1:14"));1)*(1+MOD(LIGNE(INDIRECT("1:14"));2))/10));10)=0;ET(GAUCHE(A2;9)="356000000";MOD(SOMMEPROD(STXT(A2;LIGNE(INDIRECT("1:14"));1)*1);5)=0))
Sans cette exception, un contrôle Luhn strict rejetterait des bureaux de poste bien réels, et vous perdriez du temps à chasser une erreur qui n’existe pas. Aucune autre entreprise française ne bénéficie d’un tel régime : tout autre SIRET qui échoue au test est faux.
La limite fondamentale : Luhn valide un format, pas une existence
Le test de Luhn ne consulte aucune base. Il répond à une seule question : ce numéro a-t-il pu être attribué ? Il ne dit pas s’il l’a été. Statistiquement, un numéro de 14 chiffres pris au hasard a une chance sur dix de passer le test ; un fraudeur qui invente un SIRET peut donc, en quelques essais, produire un numéro à la clé parfaite qui ne correspond à aucun établissement.
- Luhn détecte : une faute de frappe sur un chiffre, une inversion de deux chiffres voisins, un numéro tronqué ou complété au hasard.
- Luhn ne détecte pas : un SIRET jamais attribué, un établissement fermé, un numéro exact mais appartenant à une autre entreprise que celle indiquée sur la facture.
Le format n’est donc que le premier de trois contrôles. Une fois la clé validée, il reste les deux contrôles suivants, existence dans Sirene puis statut de l’établissement, qui font l’objet d’un article dédié. Ils exigent d’interroger la base Sirene de l’INSEE, ouverte en open data depuis le 1er janvier 2017 et accessible gratuitement via l’API recherche-entreprises.api.gouv.fr.
Sur quelques dizaines de numéros, une formule tableur puis une recherche manuelle dans l’Annuaire des entreprises suffisent. Au-delà, Trouve-ton-siret.com permet de soumettre un fichier complet de SIRET à ces trois contrôles à la fois : chaque ligne revient avec la confirmation de son existence dans Sirene et les données de l’établissement, en quelques minutes et sans frais. Le calcul de Luhn garde toute son utilité en amont, pour écarter les fautes de frappe avant même l’import.
Questions fréquentes
Comment fonctionne l’algorithme de Luhn sur un numéro SIRET ?
On numérote les 14 chiffres de gauche à droite, on double ceux de rang impair, on retranche 9 à tout résultat supérieur à 9, puis on additionne les 14 valeurs. Si le total est un multiple de 10, la clé est correcte. Un seul chiffre erroné fait échouer le test, ce qui en fait un filtre efficace contre les fautes de frappe.
Quelle formule Excel permet de vérifier la clé d’un SIRET ?
Une formule à base de SOMMEPROD et STXT, avec la fonction LIGNE(INDIRECT()) appliquée à la plage 1:14, extrait chaque chiffre, applique le doublement aux rangs impairs et teste le multiple de 10 dans une seule cellule. Elle fonctionne dans toutes les versions d’Excel et dans Google Sheets, à condition que le SIRET soit stocké au format Texte pour conserver un éventuel zéro initial. La formule complète, prête à copier, figure dans l’article.
Pourquoi les SIRET de La Poste ne passent-ils pas le test de Luhn ?
Les établissements de La Poste (SIREN 356 000 000) ont reçu des numéros qui ne respectent pas la clé de Luhn. L’INSEE documente une règle propre : leur SIRET est correct si la somme de ses 14 chiffres est un multiple de 5. Le siège, 356 000 000 00048, respecte quant à lui le test de Luhn classique, si bien qu’un contrôle complet accepte l’une ou l’autre condition pour ce SIREN.
Un SIRET qui passe le test de Luhn existe-t-il forcément ?
Non. Le test vérifie seulement que le numéro a un format cohérent, et un numéro sur dix pris au hasard le réussit. Pour savoir si le SIRET a réellement été attribué, et à qui, il faut interroger la base Sirene. Un outil comme Trouve-ton-siret.com le fait pour un fichier entier de SIRET en quelques minutes, à partir de l’API officielle recherche-entreprises.api.gouv.fr.
La même formule vérifie-t-elle un SIREN ou un numéro de TVA ?
Le SIREN utilise aussi Luhn, mais sur 9 chiffres : ce sont alors les chiffres de rang pair (2e, 4e, 6e, 8e) qu’il faut doubler. Le numéro de TVA intracommunautaire français repose sur un autre calcul : sa clé à deux chiffres vaut (12 + 3 × (SIREN modulo 97)) modulo 97 et ne fait pas appel à Luhn. Une formule Luhn appliquée à un numéro de TVA renverrait donc des résultats sans signification.