Visiteur  Droits sur la page Lecture seule  

 

Algo de Luhn (VB)

Private Function AlgoLuhn(ByVal sNo As String, ByVal bResult As Boolean) As Variant
Dim i As Integer, iTest As Integer, iTC As Integer
Dim iNo As Integer, iNo2 As Integer
    For i = Len(sNo) To 1 Step -1
        iTest = iTest + 1
        iNo = Mid(sNo, i, 1)
        If iTest Mod 2 <> 0 Then
            'On additionne les chiffres de position paire : No 2, 4, 6, etc
            iTC = iTC + iNo
        Else
            'On double les chiffres de position impaires : No 1, 3, 5, etc
            iNo2 = iNo * 2
            If iNo2 > 9 Then
                'Si Double > 9 on soustrait 9
                iTC = iTC + iNo2 - 9
            Else
                'Si Double <= 9 on additionne
                iTC = iTC + iNo2
            End If
        End If
    Next
    'Valeur de la clefs si True, ou OK? sinon
    If bResult Then
        If iTC Mod 10 = 0 Then
            AlgoLuhn = 0
        Else
            AlgoLuhn = 10 - (iTC Mod 10)
        End If
    Else
        If iTC Mod 10 <> 0 Then AlgoLuhn = True Else AlgoLuhn = False
    End If
    End Function

Clef No de sécurité Sociale (VB)

Public Function ClefNumeroSecu(NumeroSecu As Variant) As Variant
Dim dNumSecu As Double
Dim iReste As Integer
    Application.Volatile (True)    
    If Len(NumeroSecu) > 13 Then
        ClefNumeroSecu = "Trop de chiffre"
        Exit Function
    End If
    If Len(NumeroSecu) < 13 Then
        ClefNumeroSecu = "Pas assez de chiffre"
        Exit Function
    End If    
    dNumSecu = CDbl(NumeroSecu)
    iReste = (dNumSecu / 97 - Int(dNumSecu / 97)) * 97
    ClefNumeroSecu = Format(97 - iReste, "00")
    End Function

Clefs No SIREN (VB)

Function Siren_Valide(Siren As String) As Boolean
Dim Tampon_Siren As String
Dim Position As Byte
Dim Cumul_Siren As Integer
    Siren_Valide = False
    If Len(Siren) <> 9 Then Exit Function
    Tampon_Siren = ""
    For Position = 1 To 9
         Tampon_Siren = Tampon_Siren + CStr(Val(Mid(Siren, Position, 1)) * IIf((Position Mod 2) = 0, 2, 1))
    Next Position
    Cumul_Siren = 0
    For Position = 1 To Len(Tampon_Siren)
         Cumul_Siren = Cumul_Siren + Val(Mid(Tampon_Siren, Position, 1))
    Next Position
    Siren_Valide = ((Cumul_Siren Mod 10) = 0)
    End Function

Clefs No SIRET (VB)

Public Function ClefNumeroSiret(NumeroSiret As Variant) As Variant
Dim dNumSiret As Double
Dim iReste As Integer
    Application.Volatile (True)    
    If Len(NumeroSiret) > 14 Then
        ClefNumeroSiret = "Trop de chiffre"
        Exit Function
    End If
    If Len(NumeroSiret) < 13 Then
        ClefNumeroSiret = "Pas assez de chiffre"
        Exit Function
    End If    
    If Len(NumeroSiret) = 13 Then
        'Ajout de 0 pour faire 14 chiffres
        NumeroSiret = NumeroSiret & "0"
        'Renvoi la valeur de la clef
        ClefNumeroSiret = Format(AlgoLuhn(NumeroSiret, True), "0")
    Else
        'Renvoi OK si la clef est correcte
        If AlgoLuhn(NumeroSiret, False) Then
            ClefNumeroSiret = "Erreur de saisie"
        Else
            ClefNumeroSiret = "No valide"
        End If
    End If
    End Function

Clef du No de TVA Français (VB)

Function TVA_Clef(Siren As String) As String
Dim lSiren As Long
Dim dTmp As Double, sTmp As String
    If Siren = "" Then GoTo Err_Vide
    If Not (IsNumeric(Siren)) Then GoTo Err_Num
    If Len(Siren) <> 9 Then GoTo Err_Len
    If Not (Siren_Valide(Siren)) Then GoTo Err_Siren
    On Error GoTo Err_Gen
    lSiren = CLng(Siren)
    '( ( (Siren Mod 97) *3 ) + 12 ) Mod 97
    dTmp = (((lSiren Mod 97) * 3) + 12) Mod 97
    sTmp = CStr(dTmp)
    If Len(sTmp) = 1 Then sTmp = "0" & sTmp
    TVA_Clef = sTmp
    Exit Function    
    Err_Vide:
    TVA_Clef = ""
    Exit Function
    Err_Siren:
    TVA_Clef = "No SIREN erroné"
    Exit Function
    Err_Num:
    TVA_Clef = "Erreur de saisie"
    Exit Function
    Err_Len:
    TVA_Clef = "Nbr de chiffres erroné"
    Exit Function
    Err_Gen:
    TVA_Clef = Err.Number & " " & Err.Description
    Exit Function
    End Function

Code Banque et TVA Belge

Pour vérifier si le numéro bancaire est correct, il faut prendre les 10 premiers chiffres, et prendre le reste de la division par 97, ce reste doit correspondre aux 2 derniers chiffres du numéro.

ex: 348-0026609-95 —> 3480026609 mod 97 = 95

CheckDigits=val(gauche(replace(n°Compte,”-”,””),10)) mod 97

Pour info, les numéro de TVA Belges fonctionnent quasi de la même façon mais avec une étape en plus.

Donc prendre les 7 premiers chiffres, faire le modulo 97 dessus, ensuite faire 97 - le modulo obtenu juste avant et on obtien 2 chiffres qui correspondent aux 2 derniers du n° de TVA.

 
basetech/algoclefs.txt · Dernière modification: 10/11/2005 18:37 (édition externe)
 
Ajouter à Netvibes      

 
Derniers changements Hébergé par www.ebsoft.org Propulsé par DokuWiki