Verification siren et siret v2

Soyez le premier à donner votre avis sur cette source.

Snippet vu 28 012 fois - Téléchargée 41 fois

Contenu du snippet

2 fonctions booléennes qui retournent True si
function 1 : le Siren passé en parametre est juste sinon False
function 2 : le Siret passé en parametre est juste sinon False

[Juste ou faux selon l'algorithme de la clé de luhn]

- peuvent recevoir un nombre "variant"
- controle strict du parametre entré

Source / Exemple :


Option Explicit

Public Function Siren_IsValid(ByVal pvValue As Variant) As Boolean
    Dim i As Integer
    Dim v As Integer
    Dim iLuhnKey As Integer
    
    Siren_IsValid = False
    If Not IsNumeric(pvValue) Then Exit Function
    If Len(Format$(CDbl(pvValue), "000000000")) <> 9 Then Exit Function
    If pvValue = "000000000" Then Exit Function
    iLuhnKey = 0
    For i = 1 To Len(pvValue)
        v = CInt(Mid$(pvValue, i, 1))
        '*** Siren : les chiffres PAIRS pour le Siren sont doublés
        If (i Mod 2) = 0 Then
            v = v * 2
        End If
        If v >= 10 Then
            iLuhnKey = iLuhnKey + (v - 9)
        Else
            iLuhnKey = iLuhnKey + v
        End If
    Next i
    Siren_IsValid = (iLuhnKey Mod 10 = 0)
End Function

Public Function Siret_IsValid(ByVal pvValue As Variant) As Boolean
    Dim i As Integer
    Dim v As Integer
    Dim iLuhnKey As Integer
    
    Siret_IsValid = False
    If Not IsNumeric(pvValue) Then Exit Function
    If Len(Format$(CDbl(pvValue), "00000000000000")) <> 14 Then Exit Function
    If pvValue = "00000000000000" Then Exit Function
    If Not Siren_IsValid(Left$(pvValue, 9)) Then Exit Function
    iLuhnKey = 0
    For i = 1 To Len(pvValue)
        v = CInt(Mid$(pvValue, i, 1))
        '*** Siret : les chiffres IMPAIRS sont doublés
        If (i Mod 2) = 1 Then
            v = v * 2
        End If
        If v >= 10 Then
            iLuhnKey = iLuhnKey + (v - 9)
        Else
            iLuhnKey = iLuhnKey + v
        End If
    Next i
    Siret_IsValid = (iLuhnKey Mod 10 = 0)
End Function

Conclusion :


Remerciements à Jacques Presteau (CALCUL SIREN ET SIRET) pour la fourniture initiale du code.

Les améliorations sont les suivantes :

- meilleur contrôle de ce qui est transmis aux fonctions siren/siret. Les paramêtres doivent respecter le format "000000000", soit 9 caractéres "nombres" pour le siren et "00000000000000", soit 14 car "nombres" pour le siret. On peut chercher à passer par exemple le siren sous ce format "000 000 000", mais la fonction de check ne l'acceptera pas.

- De plus, si l'on passe vraiment la valeur "000000000" pour le siren ou "00000000000000" pour le siret, les fonctions respectives retournent faux.

- étant donné que les siren et siret sont des paramêtres variants, cette v2 est plus "utilisable" couplé à des formulaires (si null est passé, le check siret/siret est forcément faux).

- 25 fois plus rapide que le code v1 : hormis les considérations ci-dessus, j'avais pour un projet besoin d'une certaine rapidité de traitement et la fonction "s'intègre" très bien dans une requêtes qui checke beaucoup de siren ou siret

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
27 mai 2005

Ce sont les règles de composition des numéros d'identification des entreprises (SIREN) et des établissements (SIRET) gérés par l'Insee

Cordialement
Polemos
Messages postés
64
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
22 novembre 2011

Est-ce des calculs mathématiques qu'on est supposés d'apprendre au CÉGEP (Lycée suppérieur pour les européens) ou à l'université? Parce que moi, franchement, siren et siret! Je ne vois pas du tout à quoi ca sert!
Au plaisir!
Messages postés
3
Date d'inscription
mardi 29 juin 2004
Statut
Membre
Dernière intervention
30 juin 2004

Ok, effectivement cela fonctionne. Merci pour la réponse.
Messages postés
2
Date d'inscription
mercredi 24 avril 2002
Statut
Membre
Dernière intervention
29 juin 2004

En réponse à kwad,

oui, c'est possible : il faut simplement créer un module
et y coller la fonction (il ne faut pas que ce soit au niveau
de la feuille ou du classeur).
Messages postés
3
Date d'inscription
mardi 29 juin 2004
Statut
Membre
Dernière intervention
30 juin 2004

Bonjour,

Est-il possible de faire fonctionner ce code sous Excel 97 ? Lorsque je fais un copier / coller dans Visual Basic Editor et que j'appelle la fonction Siren_IsValid, j'ai un message d'erreur : Nom non valide.

Merci de votre aide.
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.