je suppose que le problème a déja été soulevé mais je ne trouve trace de
reponses:
comment controler la validité d'un RIB par une macro ?
merci d'avance.
Bonjour à tous,
merci d'avance.
.
Faut-il mettre cet algorithme dans la FAQ ?
Laurent :-)
Michel a écrit :
est-ce vraiment une affaire d'Etat ? j'aimerais vos lumières
bernard
Michel <Michel_...@Retraites-Unies.com> a écrit dans le message :
2f7901c0390d$7f9ae6b0$66862ecf@cpmsftngxa07...
"Laurent Longre" <laurent...@free.fr> a écrit dans le message news:
39EDB414...@free.fr...
>
> [HS] FAQ - Question d'éthique qui va faire taper sur les claviers, je le
> sens...
>
> Faut-il mettre cet algorithme dans la FAQ ?
>
> Laurent :-)
>
> Michel a écrit :
> >
le calcul pour contrôle de clé RIB a déjà été publié dans
la rubrique trucs et astuces de certaines revues informatiques
cet algorithme n'est pas un secret d'état, il est dans le domaine public
tout comme l'algorithme de calcul pour vérification des billets,
comme le calcul de la clé Num Sécu , c'est le résultat de la division par 97
tu trouveras une méthode par formules,sans prise en compte des lettres,
pour contrôle de validité
dans le fichier fonctions.zip à télécharger sur la FAQ de Daniel
jjh
Free a écrit :
merci jean jacques
bernard
jean jacques hinet <jjh...@chello.fr> a écrit dans le message :
39EDEBFB...@chello.fr...
"B Mazas" a écrit ...
>
> est-ce vraiment une affaire d'Etat ? j'aimerais vos lumières
Non, il est nécessaire que toutes les entreprises qui enregistrent un RIB
puisse faire cette vérification.
C'est d'ailleurs un bel exercice puisqu'il faut prendre en compte les RIB
qui ont des lettres inside.
Non, il n'y rien de secret dans la clé de RIB, c'est juste un moyen de controle
et le voici :
' Fonction Recherche de Rib
Function ClefRib(CodBanque As Single, CodGuichet As Single, _
NumCompte As String) As Integer
Dim Reste As Single, Cpte As String
Reste = (CodBanque * 100000 + CodGuichet) Mod 97
Cpte = Numériser(NumCompte)
Reste = (Reste * 10000000 + Left(Cpte, 7)) Mod 97
ClefRib = ((Reste * 10000 + Right(Cpte, 4)) * 100) Mod 97
ClefRib = 97 - (ClefRib Mod 97)
End Function
'
' Transforme un texte en nombre
'
Function Numériser(textef) As String
Application.Volatile (False)
Dim t%, n%, x$, Texte$
t = Len(textef)
Texte = UCase(textef)
For n = 1 To t
If Left(Right(Texte, t - n + 1), n) > "9" Then
x = Left(Right(Texte, t - n + 1), 1)
If x = "A" Or x = "J" Then x = 1
If x = "B" Or x = "K" Or x = "S" Then x = 2
If x = "C" Or x = "L" Or x = "T" Then x = 3
If x = "D" Or x = "M" Or x = "U" Then x = 4
If x = "E" Or x = "N" Or x = "V" Then x = 5
If x = "F" Or x = "O" Or x = "W" Then x = 6
If x = "G" Or x = "P" Or x = "X" Then x = 7
If x = "H" Or x = "Q" Or x = "Y" Then x = 8
If x = "I" Or x = "R" Or x = "Z" Then x = 9
Texte = Left(Texte, n - 1) & x & Right(Texte, t - n)
End If
Next
Numériser = Texte
End Function
J'ai écris ce code à ma sauce, c'est peut-être pas génial, mais ça marche
A+
Benead de Breiz
B Mazas a écrit :
comporter 11 caractères.
A+
Benead de Breiz
=?iso-8859-1?Q?Beno=EEt?= MARCHAND a écrit :
j'ai retrouvé la fonction VBA récupérée sur le forum Access en janvier
tes cellules doivent être au format texte pour conserver les zéros devant les
nombres
si tu as une lettre dans le N° Cpte elle doit être en majuscule
la chaîne sRib est la concaténation des champs code établissement, code guichet
et N°Cpte
Function CalculRIB(sRib As String) As String
ReDim ops(4)
Dim re As Double
Dim op As Double
Dim Inc As Integer
Dim Alpha As String
Dim car As String
Alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
For Inc = 1 To Len(sRib)
car = Mid$(sRib, Inc, 1)
If Not IsNumeric(car) Then
Mid$(sRib, Inc, 1) = Format$((InStr(Alpha, car) Mod 10), "0")
End If
Next Inc
ops(1) = Mid$(sRib, 1, 7)
ops(2) = Mid$(sRib, 8, 7)
ops(3) = Mid$(sRib$, 15, 7)
ops(4) = "00"
re = 0
op = 0
For Inc = 1 To 4
op = Val(Str$(re) + ops(Inc))
re = op - (Fix(op / 97) * 97)
Next Inc
CalculRIB = Format$(97 - re, "00")
End Function
bonne journée
jjh