EXCEL : Calculer la clef de contrôle d’un numéro SIRET

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.

Calcul clef SIRET

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 :

  1. 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 ;
  2. Additionner ensemble tous les numéros obtenus lors de l’étape 1  ;
  3. Additionner tous les chiffres position paire de droite à gauche ;
  4. Additionner les résultats des étapes 2 et 3 ;
  5. 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.

Calcul clef SIRET

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) :

Numéro SIRET de RENAULT RETAIL GROUP sur le site d'informations juridiques Pappers.

Numéro SIRET de RENAULT RETAIL GROUP sur le site d’informations juridiques Pappers.

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.

SITE AVIS SITUATION SIRENE

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 :

CB

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 :

Calcul clef CB

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

Share Button
Calcul Somme De Contrôle N° SIRET (Luhn)
Calcul Somme De Contrôle N° SIRET (Luhn)
Calcul-somme-de-controle-n%C2%B0-SIRET-Luhn.xlsm
18 KiB
62 téléchargements
Détails...
Calcul Somme De Contrôle N° CB (Luhn)
Calcul Somme De Contrôle N° CB (Luhn)
Calcul-somme-de-controle-n%C2%B0-CB-Luhn.xlsm
18 KiB
48 téléchargements
Détails...
The following two tabs change content below.
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

Un commentaire

  1. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.