Controle nombre insee

Description

'Le numéro SIREN INSEE comporte 9 chiffres.
'Pour vérifier que ce chiffre est bon l'INSEE utilise la formule de Luhn.
'On parcours les chiffres constituant le numéro de SIREN, on multiplie par 2
'les chiffres de rang pair et on fais la somme de tous les chiffres obtenus.
'Exemple : SIREN 732829320
'Chiffres de rang impair 7,2,2,3,0 non modifiés
'Chiffres de rang pair 3,8,9,2 multipliés par 2 ça donne 6, 16, 18, 4
'On additionne tous les chiffres : 7+2+2+3+0+6+1+6+1+8+4=40
'Si le nombre obtenu est un multiple de 10, le nombre est correct : ici 40 est un multiple de 10...

Source / Exemple :


Dans le module :

Option Explicit
'définition des variables utilisées et du tableau
Public i, j, k, a, b As Integer 'variables des boucles FOR
Public T(1 To 9, 1 To 4) As Integer 'tableau à deux dimension ou matrice
Public S, S1, S2, S3, intReponse, intReponse2 As Integer 'variables contenant des sommes
Public repN As Variant 'réponse de l'utilisateur

Public Sub initialise() 'cette procédure initialise les variables et la matrice (valeur o par défaut)
For a = 1 To 9
For b = 1 To 4
T(a, b) = 0
Next b
Next a
S = S1 = S2 = S3 = 0
End Sub

Public Sub Transform(repN) 'procédure de transformation du nombre INSEE

On Error GoTo NbrEntier 'vérification que l'utilsateur entre bien un nombre entier
Call initialise
If Len(repN) <> 9 Then 'vérification que l'utilisateur entre bien 9 chiffres
    intReponse = MsgBox("Veuillez entrer un nombre entier à 9 chiffres svp...", vbCritical, "Erreur")
    End
    Else 'si tout est OK on fait les transformations

    For i = 1 To 9
    T(i, 1) = Mid(repN, i, 1)
    Next i
    For j = 1 To 9 Step 2
    T(j, 2) = Mid(repN, j, 1)
    S1 = S1 + T(j, 2)
    Next j
    For k = 2 To 8 Step 2
        If 2 * Mid(repN, k, 1) < 10 Then
        T(k, 3) = 2 * Mid(repN, k, 1)
        S2 = S2 + T(k, 3)
        Else
        T(k, 4) = 2 * Mid(repN, k, 1)
        S3 = S3 + 1 + T(k, 4) Mod 10
        End If
    Next k
    
    S = S1 + S2 + S3
    Call testS
    
NbrEntier:
    If Err.Number = 13 Then
    intReponse2 = MsgBox("Veuillez entrez un nombre entier svp !")
    End
    End If

End If
End Sub

Public Sub testS() 'procédure de contrôle du nombre INSEE

    If S Mod 10 = 0 Then
    MsgBox ("Le nombre INSEE est correct")
    End
    Else
    MsgBox ("Le nombre INSEE est incorrect, recommencez!")
    End
    End If

End Sub
    

Dans la form :

Public Sub Form_Load()
    repN = InputBox("Entrez le nombre INSEE à 9 chiffres", "Nombre INSEE")
    Call Transform(repN)
End Sub

Conclusion :


Ce code n'est pas vraiment opérationnel, il manque des choses et je n'arrive pas à le perfectionner.
Je remercie tous ceux qui voudront bien m'aider, en particulier pour faire en sorte que si l'utilisateur se trompe et que le numéro
INSEE n'est pas bon, que le programme repropose de faire un calcul sans devoir relancer le programme...

Codes Sources

A voir également

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.

Du même auteur (MLH19)