calculate an IBAN Key and a rib for a french banking account
Posted: Mon Sep 03, 2007 11:00 am
Here is the method to calculate an IBAN Code for a bankin g account in all part of the word and a method to calculate the rib for a french banking account
_rib
Code: Select all
Procedure.s Caliban( compte.s, pays.s)
Protected compte1.s,clerib.s="",clerib1.l,clerib2.l
If pays = "" ;Cas ou l'on fournit seulement le BBAN (RIB) on considére qu'il sagit d'un compte Français par défaut
pays = "FR"
EndIf
;On élimine les blancs et les "-"
compte = ReplaceString(compte, " " ,"")
compte = ReplaceString(compte, "-" ,"")
;Teste si le premier caractére est une lettre auxquelles cas nous sommes en face d'un IBAN
If Asc( Left(compte,1) ) >= 48 And Asc( Left(compte,1) ) <= 59
compte1.s = compte + pays + "FR00"
Else
compte1.s = Mid(compte,5,Len(compte)-4 ) + pays +"00"
EndIf
clerib.s= ""
For i= 1 To Len(compte1)
If Asc(Mid(compte1,i,1)) >= 65 And Asc(Mid(compte1,i,1)) <= 90
clerib = clerib + Str( Asc(Mid(compte1,i,1))-55)
Else
clerib = clerib + Mid(compte1,i,1)
EndIf
Next
clerib1 = ValQ( Left(clerib,19 ) ) % 97
clerib2 =98 -ValQ ( StrQ(clerib1) + Right(clerib,Len(clerib)-19 ) ) % 97
;Teste si le compte a été fourni au format BBAN ou au format IBAN
If Asc( Left(compte,1) ) >= 48 And Asc( Left(compte,1) ) <= 59
ProcedureReturn pays + RSet( Str(clerib2) , 2 , "0") + compte
Else
ProcedureReturn pays + RSet( Str(clerib2) , 2 , "0") + Mid(compte,5,Len(compte)-4)
EndIf
EndProcedure
Procedure.s Clef_rib(bban.s)
;==================
;Calculer la cle rib
;===================
Protected a.s,i.b=1,b.b=1,banque.s,agence.s,rib.s,compte.s,clerib2.s=""
If Len(bban) = 23
banque.s= Left(bban,5)
agence.s = Mid(bban,6,5)
rib.s = Mid(bban,11,11)
Else
banque.s= Mid(bban,5,5)
agence.s = Mid(bban,10,5)
rib.s = Mid(bban,15,11)
EndIf
Protected HOLLERITH.s = "AJ BKSCLTDMUENVFOWGPXHQYIRZ"
;Agence
;===============================
;Calcul de la cle rib
;===============================
For i = 1 To 11
a = Mid(rib, i , 1 )
If Asc(a) >= 65
b = FindString(HOLLERITH,a ,1)
If b % 3 <> 0
b = Int(b / 3) + 1
Else
b = b / 3
EndIf
rib = Left(rib, i - 1) + Str(b) + Right(rib, 11 - i)
EndIf
Next
compte= banque+agence+rib+"00"
clerib1 = ValQ( Left( compte ,19 ) ) % 97
clerib2 = StrQ( 97- ( ValQ( StrQ(clerib1) +Mid( compte,20,4) ) % 97) )
clerib2 = RSet( clerib2,2,"0")
ProcedureReturn Mid(bban,1, Len(BBan)-2)+ clerib2
EndProcedure ;==>Clef
Code: Select all