- 'Module de calcul et de contrôle de clé RIB
- '__________________________________________
- '
- 'Jeux d'essai :
- ' 12345 67890 12345678901 clé => 04
- ' 54321 54321 10987654321 clé => 47
- ' 99999 55555 16589A45566 clé => 63
- ' 20001 75200 12345678901 clé => 05
-
- Option Explicit
-
- Function Calcul_pour_Clé_RIB(ByVal Code_banque As String, ByVal Code_guichet As String, ByVal N°_Compte As String)
- '
- '© Jacques PRESTREAU, 1999
- '
- 'Renvoie False en cas d'erreur
- 'Renvoie un entier en cas de succès
- '
- Dim Compteur1, Reste, N°_Compte_Converti, Valeur_Ascii_Caractère
-
- If Not IsNumeric(Code_banque) Then
- MsgBox "Code banque non numérique"
- Calcul_pour_Clé_RIB = False
- Exit Function
- End If
- If Not IsNumeric(Code_guichet) Then
- MsgBox "Code guichet non numérique"
- Calcul_pour_Clé_RIB = False
- Exit Function
- End If
-
- 'Substitution des Lettres par les chiffres correspondants
-
- N°_Compte_Converti = ""
-
- For Compteur1 = 1 To Len(N°_Compte)
- Valeur_Ascii_Caractère = Asc(Mid$(N°_Compte, Compteur1, 1))
- Select Case Valeur_Ascii_Caractère
- Case Is > 82
- N°_Compte_Converti = N°_Compte_Converti + Chr$(48 + ((Valeur_Ascii_Caractère - 81) Mod 10))
- Case Is > 73
- N°_Compte_Converti = N°_Compte_Converti + Chr$(48 + ((Valeur_Ascii_Caractère - 73) Mod 10))
- Case Is > 57
- N°_Compte_Converti = N°_Compte_Converti + Chr$(48 + ((Valeur_Ascii_Caractère - 64) Mod 10))
- Case Else
- N°_Compte_Converti = N°_Compte_Converti + Chr$(Valeur_Ascii_Caractère)
- End Select
- Next Compteur1
-
- Calcul_pour_Clé_RIB = Val(Code_banque) Mod 97
- Calcul_pour_Clé_RIB = ((Calcul_pour_Clé_RIB * 100000) + Val(Code_guichet)) Mod 97
- Calcul_pour_Clé_RIB = ((Calcul_pour_Clé_RIB * 1000000) + Val(Left$(Format$(N°_Compte_Converti, "00000000000"), 6))) Mod 97
- Calcul_pour_Clé_RIB = ((Calcul_pour_Clé_RIB * 100000) + Val(Right$(Format$(N°_Compte_Converti, "00000000000"), 5))) Mod 97
-
- End Function
-
- Function Controle_Clé_Rib(ByVal Code_banque As String, ByVal Code_guichet As String, ByVal N°_Compte As String, ByVal Clé_Rib As String) As Boolean
- '
- '© Jacques PRESTREAU, 1999
- '
- 'Renvoie False en cas d'erreur
- 'Renvoie True en cas de succès
- '
- Dim Pré_Calcul
-
- Pré_Calcul = Calcul_pour_Clé_RIB(Code_banque, Code_guichet, N°_Compte)
-
- If (Not Pré_Calcul = False) And (((Pré_Calcul * 100) + Val(Clé_Rib)) Mod 97) <> 0 Then
- MsgBox "Clé RIB erronée"
- Controle_Clé_Rib = False
- Else
- Controle_Clé_Rib = True
- End If
-
- End Function
-
- Function Clé_Rib(ByVal Code_banque As String, ByVal Code_guichet As String, ByVal N°_Compte As String)
- '
- '© Jacques PRESTREAU, 1999
- '
- 'Renvoie False en cas d'erreur
- 'Renvoie la clé en String en cas de succès
- '
- Dim Pré_Calcul
-
- Pré_Calcul = Calcul_pour_Clé_RIB(Code_banque, Code_guichet, N°_Compte)
-
- If (Not Pré_Calcul = False) Then
- Clé_Rib = Format$(((97 - Pré_Calcul) * 100) Mod 97, "00")
- End If
-
- End Function
-
'Module de calcul et de contrôle de clé RIB
'__________________________________________
'
'Jeux d'essai :
' 12345 67890 12345678901 clé => 04
' 54321 54321 10987654321 clé => 47
' 99999 55555 16589A45566 clé => 63
' 20001 75200 12345678901 clé => 05
Option Explicit
Function Calcul_pour_Clé_RIB(ByVal Code_banque As String, ByVal Code_guichet As String, ByVal N°_Compte As String)
'
'© Jacques PRESTREAU, 1999
'
'Renvoie False en cas d'erreur
'Renvoie un entier en cas de succès
'
Dim Compteur1, Reste, N°_Compte_Converti, Valeur_Ascii_Caractère
If Not IsNumeric(Code_banque) Then
MsgBox "Code banque non numérique"
Calcul_pour_Clé_RIB = False
Exit Function
End If
If Not IsNumeric(Code_guichet) Then
MsgBox "Code guichet non numérique"
Calcul_pour_Clé_RIB = False
Exit Function
End If
'Substitution des Lettres par les chiffres correspondants
N°_Compte_Converti = ""
For Compteur1 = 1 To Len(N°_Compte)
Valeur_Ascii_Caractère = Asc(Mid$(N°_Compte, Compteur1, 1))
Select Case Valeur_Ascii_Caractère
Case Is > 82
N°_Compte_Converti = N°_Compte_Converti + Chr$(48 + ((Valeur_Ascii_Caractère - 81) Mod 10))
Case Is > 73
N°_Compte_Converti = N°_Compte_Converti + Chr$(48 + ((Valeur_Ascii_Caractère - 73) Mod 10))
Case Is > 57
N°_Compte_Converti = N°_Compte_Converti + Chr$(48 + ((Valeur_Ascii_Caractère - 64) Mod 10))
Case Else
N°_Compte_Converti = N°_Compte_Converti + Chr$(Valeur_Ascii_Caractère)
End Select
Next Compteur1
Calcul_pour_Clé_RIB = Val(Code_banque) Mod 97
Calcul_pour_Clé_RIB = ((Calcul_pour_Clé_RIB * 100000) + Val(Code_guichet)) Mod 97
Calcul_pour_Clé_RIB = ((Calcul_pour_Clé_RIB * 1000000) + Val(Left$(Format$(N°_Compte_Converti, "00000000000"), 6))) Mod 97
Calcul_pour_Clé_RIB = ((Calcul_pour_Clé_RIB * 100000) + Val(Right$(Format$(N°_Compte_Converti, "00000000000"), 5))) Mod 97
End Function
Function Controle_Clé_Rib(ByVal Code_banque As String, ByVal Code_guichet As String, ByVal N°_Compte As String, ByVal Clé_Rib As String) As Boolean
'
'© Jacques PRESTREAU, 1999
'
'Renvoie False en cas d'erreur
'Renvoie True en cas de succès
'
Dim Pré_Calcul
Pré_Calcul = Calcul_pour_Clé_RIB(Code_banque, Code_guichet, N°_Compte)
If (Not Pré_Calcul = False) And (((Pré_Calcul * 100) + Val(Clé_Rib)) Mod 97) <> 0 Then
MsgBox "Clé RIB erronée"
Controle_Clé_Rib = False
Else
Controle_Clé_Rib = True
End If
End Function
Function Clé_Rib(ByVal Code_banque As String, ByVal Code_guichet As String, ByVal N°_Compte As String)
'
'© Jacques PRESTREAU, 1999
'
'Renvoie False en cas d'erreur
'Renvoie la clé en String en cas de succès
'
Dim Pré_Calcul
Pré_Calcul = Calcul_pour_Clé_RIB(Code_banque, Code_guichet, N°_Compte)
If (Not Pré_Calcul = False) Then
Clé_Rib = Format$(((97 - Pré_Calcul) * 100) Mod 97, "00")
End If
End Function