Le numéro SIREN (Système d’Identification du Répertoire des ENtreprises) est un identifiant attribué à chaque entreprise en France. Son rôle est de permettre une identification unique et une traçabilité dans divers contextes administratifs et économiques.
Cependant, pour garantir la précision et l’intégrité des données, il est essentiel de vérifier la validité des numéros SIREN intégrés dans les bases de données (fiches tiers…). Dans cet article, nous fournirons une requête SQL pour faciliter ce processus de vérification sur l’ensemble d’une table de données tiers (clients, fournisseurs…) après un rapide propos introductif sur l’histoire de la création du SIREN.
Histoire du numéro SIREN
Le numéro SIREN a été introduit en France en 1973 pour simplifier l’identification des entreprises et faciliter leur suivi administratif.
Composé de 9 chiffres, il identifie de manière unique chaque entreprise enregistrée, quelle que soit sa forme juridique. Le SIREN est utilisé dans de multiples domaines, tels que les déclarations fiscales, la gestion comptable et commerciale (identification des partenaires commerciaux)…
Composition du numéro SIREN
Les huit premiers chiffres du numéro SIREN identifient l’entreprise et le neuvième, calculé à partir des huit premiers, constitue la clef de contrôle. C’est la cohérence entre les huit premiers chiffres et la clef de contrôle qu’il convient de vérifier. La clef (ou somme) de contrôle est calculée selon l’algorithme de Luhn.
L’algorithme de Luhn
L’algorithme de Luhn, également connu sous le nom d’algorithme de Mod 10, est une méthode couramment utilisée pour vérifier l’intégrité des numéros d’identification. Il a été créé dans les années 60 par un ingénieur allemand nommé Hans Peter LUHN alors qu’il travaillait comme chercheur chez IBM, et sa notoriété prit forme lorsque les banques l’adoptèrent pour vérifier la validité des numéros de cartes de crédit. Il repose sur un calcul de somme de contrôle pour détecter les erreurs de saisie ou de transmission. Il est donc utilisé pour valider les numéros de cartes bancaires mais aussi les numéros de sécurité sociale, IMEI (téléphones portables), SIREN et SIRET, de TVA intracommunautaire…
Pour vérifier une somme de contrôle d’un numéro SIREN, cet algorithme repose sur les étapes de calcul suivantes :
- Doubler un chiffre sur deux (position paire) en partant de la droite vers gauche. Si le résultat donne un nombre à deux chiffres, soustraire 9 pour obtenir un seul chiffre ;
- Additionner ensemble tous les numéros obtenus lors de l’étape 1 ;
- Additionner tous les chiffres position impaire de droite à gauche ;
- Additionner les résultats des étapes 2 et 3 ;
- Si le résultat de l’étape 4 est divisible par 10, le numéro SIREN testé est valide sinon, il est invalide.
Cet algorithme est assez simple à programmer.
>>> Autre exemple d’application de l’algorithme de Luhn : contrôle de la validité d’un numéro de Sécurité sociale / calcul du numéro de TVA intracommunautaire à partir d’un numéro SIREN.
Requête SQL de contrôle de la validité du numéro SIREN
La requête ci-après permet de calculer instantanément (y compris sur des tables de plusieurs milliers de tiers) la validité des numéros SIREN. Je l’ai implémentée sur mon projet PADoCC_Ecritures (programme d’analyse des données comptables de groupes de sociétés). Les balances auxiliaires enrichies (lien vers les informations juridiques Pappers, les publicités légales, les cotations…) comprennent maintenant un test de validité des numéros SIREN figurant dans les fiches tiers :
Avant de vérifier la clef SIREN, la requête commence par vérifier que le numéro SIREN est bien un nombre sur neuf positions : IIf([SIREN] Is Not Null,IIf([SIREN] Like ‘#########’.
La requête vérifie la somme de contrôle de chaque numéro SIREN de la table _BAUX (balances auxiliaires du groupe) en respectant les différentes étapes de l’algorithme de Luhn :
- Doubler un chiffre sur deux (position paire) en partant de la droite vers gauche (Mid([SIREN],8,1)*2...). Si le résultat donne un nombre à deux chiffres (IIf(Mid([SIREN], 8, 1)*2>9), soustraire 9 pour obtenir un seul chiffre ;
- Additionner ensemble tous les numéros obtenus lors de l’étape 1 :
Mid([SIREN], 8, 1)*2-IIf(Mid([SIREN], 8, 1)*2>9,9,0) +Mid([SIREN], 6, 1)*2-IIf(Mid([SIREN], 6, 1)*2>9,9,0) +Mid([SIREN], 4, 1)*2-IIf(Mid([SIREN], 4, 1)*2>9,9,0) +Mid([SIREN], 2, 1)*2-IIf(Mid([SIREN], 2, 1)*2>9,9,0)
- Additionner tous les chiffres position impaire de droite à gauche : Mid([SIREN], 9, 1)…
- Additionner les résultats des étapes 2 et 3 ;
- Si le résultat de l’étape 4 est divisible par 10 (Mod 10=0), le numéro SIREN testé est valide sinon, il est invalide.
IIf(condition,action1,action2) est une structure de test conditionnel. Un test conditionnel permet de n’exécuter une instruction ou un ensemble d’instructions que si une ou plusieurs conditions sont remplies. Plus d’infos : Tests conditionnels dans des requêtes SQL.
La fonction MID(chaîne,position,longueur) renvoie un extrait de la chaîne à partir du caractère situé à la position position et sur le nombre de caractères désigné par longueur ; ainsi MID(“542065479”,8,1) retourne “7”.
L’opérateur MOD renvoie le reste d’une division. Plus d’infos sur les opérateurs arithmétiques.
La requête renvoie les messages suivant dans le champ SIREN_Valide créé à cet effet :
- Vide (Null) : si numéro SIREN absent ;
- Format incorrect : si le numéro SIREN n’est pas un nombre composé de neuf chiffres ;
- Non valide : si la clef calculée par la requête ne correspond pas au numéro SIREN ;
- Valide : la clef SIREN est valide.
>>> Pour tester la validité d’un numéro SIREN avec Excel (VBA), cliquer ici.
Code-source de la requête SQL :
SELECT CompteAuxNum, SIREN, IIf([SIREN] Is Not Null,IIf([SIREN] Like '#########', IIf((Mid([SIREN], 8, 1)*2-IIf(Mid([SIREN], 8, 1)*2>9,9,0) +Mid([SIREN], 6, 1)*2-IIf(Mid([SIREN], 6, 1)*2>9,9,0) +Mid([SIREN], 4, 1)*2-IIf(Mid([SIREN], 4, 1)*2>9,9,0) +Mid([SIREN], 2, 1)*2-IIf(Mid([SIREN], 2, 1)*2>9,9,0) +Mid([SIREN], 9, 1) +Mid([SIREN], 7, 1) +Mid([SIREN], 5, 1) +Mid([SIREN], 3, 1) +Mid([SIREN], 1, 1)) Mod 10=0, 'Valide', 'Non valide'), 'Format incorrect'), Null) AS SIREN_Valide FROM _BAUX;
A noter, cette requête ne vérifie pas l’existence du numéro SIREN mais seulement la cohérence entre les huit premiers chiffres et la clef de contrôle.
Découvrir les requêtes SQL : Analyse de données et automatisation avec Excel et Access (9ème volet)
___
Approfondir le sujet : SIREN / Information légale des entreprises
Derniers articles parBenoît RIVIERE (voir tous)
- Lancer l’exécution d’un script Python à partir d’une macro VBA - lundi 9 septembre 2024
- Open Data : quoi de neuf ? - lundi 2 septembre 2024
- Auditsi cité dans le podcast Marketing du cabinet comptable - mercredi 21 août 2024
- IA générative : aide à la rédaction de prompts efficaces - samedi 17 août 2024
- S’initier à l’analyse de données et l’automatisation des tâches - dimanche 11 août 2024