Bonjour le forum
Bonjour Yvon, bonjour José
Pour que José aille plus vite faire un t'chiot Quizzzzzzzzzzzz (Amicalement)
'Module de calcul et de contrôle de clé RIB
'
'La fonction Clé_Rib fournit la clé
'La fonction Controle_Clé_Rib contrôle une clé fournie
'La fonction Calcul_pour_Clé_RIB est à usage interne des deux autres fonctions
'__________________________________________
'
'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
Non testé pour ma part.
@ ++ Eric C