Le numéro SIRET (Système d’Identification du Répertoire des ETablissements) est un identifiant attribué à chaque établissement d’une entreprise par l’INSEE. Il a été créé dans le but de simplifier l’identification et la gestion administrative des entreprises et de leurs établissements.
Dans cet article, nous fournirons une macro VBA qui calcule clef de contrôle d’un numéro SIRET ; ceci afin soit de vérifier la clef d’un numéro SIRET existant, soit de créer de toute pièce un numéro SIRET.
Histoire et composition du numéro SIRET
Tout comme le numéro SIREN, le numéro SIRET a été introduit en France en 1973 pour simplifier l’identification des établissements et faciliter leur suivi administratif. Il identifie de manière unique chaque établissement d’une entreprise. Le SIRET est utilisé dans de multiples domaines, tels que les déclarations fiscales, la gestion comptable et commerciale (identification des partenaires commerciaux)…
Composé de 14 chiffres, le numéro SIRET combine :
- Le numéro SIREN (identifiant de l’entreprise) sur neuf chiffres ;
- Suivi du Numéro Interne de Classement (NIC) propre qui identifie l’établissement (de 1 à 9999) sur quatre positions ;
- Puis d’une somme de contrôle (sur une position) calculée à partir des treize premiers (SIREN+NIC) selon l’algorithme de Luhn.
C’est la cohérence entre les treize premiers chiffres et la clef de contrôle qu’il convient de vérifier.
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 calculer 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 impair) 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 paire de droite à gauche ;
- Additionner les résultats des étapes 2 et 3 ;
- La somme de contrôle est égale à (10 – (résultat de l’addition Mod 10)) Mod 10
Cet algorithme est assez simple à programmer.
>>> Autre exemple d’application de l’algorithme de Luhn : contrôle de la validité d’un numéro SIRET / contrôle de la validité d’un numéro SIREN / 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.
Macro VBA de calcul de la clef de contrôle d’un numéro SIRET
La fonction CalculeClefLuhn_SIRET calcule la somme de contrôle d’un numéro SIRET dépourvu de clef de contrôle (sur 13 chiffres) selon l’algorithme de Luhn exposé ci-avant et renvoie :
- Un chiffre positif de 0 à 9
- -1 si le numéro SIRET est d’une longueur différente de treize chiffres.
Exemple d’utilisation dans un classeur Excel :
=CalculeClefLuhn_SIRET(“3122123010200”)
Dans le cas présent, cette formule de calcul Excel renvoie le chiffre 1 correspondant à la clef de contrôle des treize premiers chiffres du numéro SIRET “3122123010200”. Le numéro de SIRET complet est donc : 312 212 301 02001, soir celui de RENAULT RETAIL GROUP (ouf ! la formule de calcul fonctionne correctement) :
Le fichier Excel comprenant la macro VBA est téléchargeable ci-après.
Code-source de la macro VBA :
'---------------------------------------------------------------------------------- ' ' Calcul de la somme de contrôle d'un numéro SIRET ' ' Infos : https://www.auditsi.eu/?p=11620 ' '---------------------------------------------------------------------------------- Option Explicit '---------------------------------------------------------------------------------- 'Algorithme de Luhn applicable aux numéros SIREN et SIRET '---------------------------------------------------------------------------------- 'Calcule la clef de contrôle d'une chaîne (qui ne contient pas la clef) selon l'algorithme de Luhn Private Function CalculeClefLuhn(Chaîne As String) As Integer 'Déclaration des variables Dim LongueurChaîne As Integer Dim i As Integer Dim Position As Integer Dim Chiffre As Integer Dim Addition As Integer 'Calcule le nombre de caractères de la Chaîne LongueurChaîne = Len(Chaîne) Addition = 0 'Parcourt chaque chiffre de la variable Chaîne de droite à gauche For i = LongueurChaîne To 1 Step -1 Position = Position + 1 'Lit le chiffre en cours (position i dans la Chaîne) Chiffre = CInt(Mid(Chaîne, i, 1)) 'Si la position est paire (à partir de la droite), multiplier par 2 If Position Mod 2 <> 0 Then 'si le reste de la division i/2= 0 -> position paire sinon impaire Chiffre = Chiffre * 2 'Si le résultat de la multiplication est supérieur à 9, soustraire 9 If Chiffre > 9 Then Chiffre = Chiffre - 9 End If End If 'Additionne les chiffres au fur et à mesure de l'exécution de la boucle (impairs*2 + pairs) Addition = Addition + Chiffre Next i 'Calcule la clef de contrôle CalculeClefLuhn = (10 - (Addition Mod 10)) Mod 10 End Function 'Calcule la clef d'un numéro SIRET (13 caractères) ' Valeur de retour : ' - chiffre positif de 0 à 9 : clef de contrôle ' - -1 : longueur du numéro SIRET fourni (sans clef de contrôle) <> 13 Function CalculeClefLuhn_SIRET(Chaîne As String) As Integer Select Case Len(Chaîne) Case 13: CalculeClefLuhn_SIRET = CalculeClefLuhn(Chaîne) Case Else: CalculeClefLuhn_SIRET = -1 End Select End Function
A noter, cette macro calcule la somme de contrôle pour constituer un numéro SIRET complet ; pour autant le numéro SIRET ainsi constitué n’aura pas nécessairement une existence réelle. Pour vérifier l’existence légale d’un numéro SIRET, il suffit de se rendre, entre autres exemples, sur le répertoire SIRENE (INSEE) ou encore sur Pappers.fr.
Petit bonus : calculer la clef d’un numéro de carte bancaire :
Le recto d’une carte de paiement comporte un numéro composé de seize chiffres qui l’identifient manière unique :
Un numéro de carte de paiement est constitué de :
- 6 chiffres identifiant l’émetteur de la carte (ou BIN pour Bank Identification Number) ;
- 9 chiffres combinés aléatoirement (1 milliard de combinaisons possibles) et qui correspondent au numéro de la carte bancaire à proprement parlé ;
- le dernier chiffre constitue la clef de contrôle calculée à l’aide de l’algorithme de Luhn.
Vous pouvez essayer sur votre propre carte bancaire en soumettant les quinze premiers chiffres à la fonction CalculeClefLuhn_CB dont le code VBA est fourni ci-après… Cette fonction fonctionne rigoureusement de la même manière que la fonction CalculeClefLuhn_SIRET :
D’un point de vue théorique, il est donc possible de créer à loisir des numéros de carte bancaire fictif pour effectuer des paiements en ligne… toutefois, la commande en ligne ne passera ni l’étape de contrôle du cryptogramme visuel (ou code CVV pour Card Validation Value, aussi appelé CVC (Card Validation Code) constitué de 3 ou 4 caractères situés en général au verso de la carte de paiement), du nom du titulaire et de la date d’expiration, ni celle de l’authentification SMS ou par mél voire biométrique. Ce code est fourni à titre pédagogique ; il ne doit pas être utilisé à d’autres fins (fraude par exemple).
'---------------------------------------------------------------------------------- ' ' Calcul de la somme de contrôle d'un numéro CB ' ' Infos : https://www.auditsi.eu/?p=11620 ' '---------------------------------------------------------------------------------- Option Explicit '---------------------------------------------------------------------------------- 'Algorithme de Luhn applicable aux numéros CB '---------------------------------------------------------------------------------- 'Calcule la clef de contrôle d'une chaîne (qui ne contient pas la clef) selon l'algorithme de Luhn Private Function CalculeClefLuhn(Chaîne As String) As Integer 'Déclaration des variables Dim LongueurChaîne As Integer Dim i As Integer Dim Position As Integer Dim Chiffre As Integer Dim Addition As Integer 'Calcule le nombre de caractères de la Chaîne LongueurChaîne = Len(Chaîne) Addition = 0 'Parcourt chaque chiffre de la variable Chaîne de droite à gauche For i = LongueurChaîne To 1 Step -1 Position = Position + 1 'Lit le chiffre en cours (position i dans la Chaîne) Chiffre = CInt(Mid(Chaîne, i, 1)) 'Si la position est paire (à partir de la droite), multiplier par 2 If Position Mod 2 <> 0 Then 'si le reste de la division i/2= 0 -> position paire sinon impaire Chiffre = Chiffre * 2 'Si le résultat de la multiplication est supérieur à 9, soustraire 9 If Chiffre > 9 Then Chiffre = Chiffre - 9 End If End If 'Additionne les chiffres au fur et à mesure de l'exécution de la boucle (impairs*2 + pairs) Addition = Addition + Chiffre Next i 'Calcule la clef de contrôle CalculeClefLuhn = (10 - (Addition Mod 10)) Mod 10 End Function 'Calcule la clef d'un numéro CB (15 caractères) ' Valeur de retour : ' - chiffre positif de 0 à 9 : clef de contrôle ' - -1 : longueur du numéro SIRET fourni (sans clef de contrôle) <> 15 Function CalculeClefLuhn_CB(Chaîne As String) As Integer Select Case Len(Chaîne) Case 15: CalculeClefLuhn_CB = CalculeClefLuhn(Chaîne) Case Else: CalculeClefLuhn_CB = -1 End Select End Function
Il ne vous reste plus qu’à tester sans modération !
___
Approfondir le sujet : SIRET / SIREN / Information légale des entreprises
Derniers articles parBenoît RIVIERE (voir tous)
- VBA/SQL vs Power Query : deux solutions complémentaires - mercredi 2 octobre 2024
- L’IA dans les cabinets comptables : cas concrets - jeudi 26 septembre 2024
- EXCEL : insérer une image ou un logo dans une cellule - lundi 16 septembre 2024
- 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
Pingback: EXCEL (VBA) : Automatiser le téléchargement en masse des avis de situation SIRENE (avec l'API de l'INSEE) - Audit & Systèmes d'Information