Contrôler un code SIREN ou SIRET
Introduction
Le numéro de SIREN est attribué par l'INSEE lors de la création d'une entreprise (ou lors de la déclaration d'existence des travailleurs indépendants, artistes auteurs).
Ce code est national, invariable et dure le temps de la vie de l'entreprise.
Il est composé de 9 chiffres et se présente comme suit selon l'activité :
- Profession libérale / artiste auteur : 000 000 000
- Commerçant : 000 000 000 RCS
- Artisan : 000 000 000 RM 000
Le numéro de SIRET, quant à lui, identifie géographiquement l'établissement d'une entreprise. Il est composé de 14 chiffres correspondant au SIREN (9 chiffres) + le NIC (5 chiffres).
Il peut donc y avoir plusieurs SIRET à partir d'un seul SIREN si une entreprise à plusieurs établissements.
Règles de validation
Validité d'un numéro de SIREN
Le numéro SIREN est composé de 8 chiffres, plus un chiffre de contrôle qui permet de vérifier la validité du numéro.
La clef de contrôle utilisée pour vérifier l'exactitude d'un identifiant est une clef « 1-2 », suivant l'algorithme de Luhn.
Le principe est le suivant : on multiplie les chiffres de rang impair à partir de la droite par 1, ceux de rang pair par 2.
La somme des chiffres obtenus doit être congrue à zéro modulo 10, c'est-à-dire qu'elle doit être multiple de 10.
Exemple de contrôle de numéro SIREN
Code SIREN 732829320
Pos9 | Pos8 | Pos7 | Pos6 | Pos5 | Pos4 | Pos3 | Pos2 | Pos1 |
|---|---|---|---|---|---|---|---|---|
7 | 3 | 2 | 8 | 2 | 9 | 3 | 2 | 0 |
7x1 | 3x2 | 2x1 | 8x2 | 2x1 | 9x2 | 3x1 | 2x2 | 0x1 |
7 | 6 | 2 | 16 | 2 | 18 | 3 | 4 | 0 |
La somme des chiffres suivants : 7+6+2+1+6+2+1+8+3+4+0 vaut 40, qui est multiple de 10.
Ce numéro SIREN est donc correct.
Validité d'un numéro de SIRET
Le numéro SIRET est composé de 14 chiffres, dont un chiffre de contrôle (le dernier) qui permet de vérifier la validité du numéro de SIRET (SIREN + NIC).
La clef de contrôle utilisée pour vérifier l'exactitude d'un identifiant est une clé "1-2", suivant l'algorithme de Luhn.
Le principe est le suivant : on multiplie les chiffres de rang impair à partir de la droite par 1, ceux de rang pair par 2.
La somme des chiffres obtenus doit être congrue à zéro modulo 10, c'est-à-dire qu'elle doit être multiple de 10.
Exemple de contrôle de numéro SIRET
Code SIRET 73282932000074
Pos14 | Pos13 | Pos12 | Pos11 | Pos10 | Pos9 | Pos8 | Pos7 | Pos6 | Pos5 | Pos4 | Pos3 | Pos2 | Pos1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 3 | 2 | 8 | 2 | 9 | 3 | 2 | 0 | 0 | 0 | 0 | 7 | 4 |
7x2 | 3x1 | 2x2 | 8x1 | 2x2 | 9x1 | 3x2 | 2x1 | 0x2 | 0x1 | 0x2 | 0x1 | 2x2 | 4x1 |
(14)1+4 | 3 | 4 | 8 | 4 | 9 | 6 | 2 | 0 | 0 | 0 | 0 | 4 | 4 |
La somme des chiffres suivants : 1+4+3+4+8+4+9+6+2+0+0+0+0+1+4+4 vaut 50, qui est multiple de 10.
Ce numéro SIRET est donc correct.
Exemple de code permettant la vérification d'un code SIREN ou SIRET
En entrée, 2 zones écran :
- ZADH_NUM_SIR_ADH est le numéro de SIREN - NUM_E(9,0)
- ZADH_NIC_ADH est le NIC (numéro interne de classement) - NUM_E(5,0)
En sortie :
- W_FLG_CTRL contient une valeur *Vrai si le SIRET ou SIREN est valide, *Faux sinon.
Alpha(9) WA_SIREN
Alpha(14) WA_SIRET
Nun_E(14,0) WN_SIRET
Alpha(1) W_A
Nun_E(1,0) W_N
Num_Bin_2 W_POS
Bool W_IMPAIRE
Num_E(3,0) W_SOM
Num_E(1,0) W_UNIT
Num_E(2,0) W_DIZ
Si ZADH_NIC_ADH = 0
/* ___ traitement SIREN ____________________________________________
Placer_A_Droite ZADH_NUM_SIR_ADH WA_SIREN
W_POS = 9
W_IMPAIRE = *Vrai
Tant_Que W_POS >= 1
W_A = &Extraction(WA_SIREN;W_POS;1)
W_N = &Alpha_Num(W_A)
Si W_IMPAIRE /* --- impair
W_SOM = W_SOM + W_N
Sinon /* --- pair
W_DIZ = W_N * 2
Si W_DIZ <= 9
W_SOM = W_SOM + W_DIZ
Sinon /* --- Résultat multiplication sur 2 positions
W_DIZ = W_DIZ - 10
W_SOM = W_SOM + 1 + W_DIZ
Fin
Fin
W_POS = W_POS - 1
W_IMPAIRE = Non W_IMPAIRE
Refaire
Sinon
/* ___ traitement SIRET ____________________________________________
WN_SIRET = (ZADH_NUM_SIR_ADH * 100000) + ZADH_NIC_ADH
Placer_A_Droite WN_SIRET WA_SIRET
W_POS = 14
W_IMPAIRE = *Vrai
Tant_Que W_POS >= 1
W_A = &EXTRACTION(WA_SIRET;W_POS;1)
W_N = &ALPHA_NUM(W_A)
Si W_IMPAIRE /* --- impair
W_SOM = W_SOM + W_N
Sinon /* --- pair
W_DIZ = W_N * 2
Si W_DIZ <= 9
W_SOM = W_SOM + W_DIZ
Sinon /* --- Résultat multiplication sur 2 positions
W_DIZ = W_DIZ - 10
W_SOM = W_SOM + 1 + W_DIZ
Fin
Fin
W_POS = W_POS - 1
W_IMPAIRE = Non W_IMPAIRE
Refaire
Fin
/* ___ Récupère l'unité de W_SOM ______________________________________
W_UNIT = W_SOM / 10
Reste W_UNIT
W_FLG_CTRL = (W_UNIT = 0)