Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Comment calculer le modulo d'un nombre de 21 chiffres, comme la clé d'un RIB

97 views
Skip to first unread message

Claude Lesourd

unread,
May 27, 1998, 3:00:00 AM5/27/98
to

Je souhaite calculer sous Access 97 la clé de contrôle d’un RIB, soit le
modulo d’un nombre de 21 chiffres. La formule est la suivante :
- les 5 chiffres du code Etablissement,
- les 5 chiffres du code Guichet,
- les 11 chiffres du numéro de compte (après équivalence numérique des
caractères alphabétiques éventuels)
- Soit la clé de contrôle K par la formule : K = 97 moins le reste de la
division de (100 x N) par 97

Manuellement cela donne le calcul suivant pour le RIB :
100960015101518200173 clé 76

100960015101518200173 x 100

10096001510151820017300 |97
396 |104082489795379587807
800 |
241 |
475 |
871 |
950 |
771 |
925 |
521 |
368 |
772 |
930 |
570 |
851 |
757 |
783 |
700 |
21 |
97 - 21 = 76
La clé de contrôle est 76

En code, j’utilise la formule suivante :

Function K(N As Double) As Long
'Ne fonctionne pas avec un nombre de plus de 17 chiffres, soit N de 15
chiffres + 2 (N * 100)
N = N * 100
K = CLng(N - (97 * CDbl(Int(N / 97))))
K = 97 - K
End Function

Mais avec un chiffre N de plus de 15 chiffres, le résultat est faux !

Par contre, pour calculer la clé d’un numéro de sécurité sociale avec les 13
chiffres, cela ne pose aucun problème. Essayez avec le vôtre avec la formule
ci-dessus, mais avec N * 1 et non par 100.

Mais existe-t-il un moyen de calculer le modulo sur des nombres de 21
chiffres comme le RIB ?

Merci très sincèrement de votre aide.


Vande...@msn.com

unread,
May 27, 1998, 3:00:00 AM5/27/98
to

Salut Claude,


Il n'y a pas moyen de conserver l'argument dans la précision désirée:

CLng( 100960015101518200173 * 100 )

retourne une erreur de dépassement. VBA ramènera probablement le résultat
(entier très long) à une donnée en point flottant et alors tu es limité à
17-18 chiffres en base 10.

Une solution est de procéder avec deux nombres:

N1 * 10^10 + N2

où tu ne conserves que N1 et N2 dans la table. Ensuite, utilises:

M1 = N1 MOD Clée
M = ((M1*10^10) + N2) MOD Clée

et M est le résidu modulo cherché.

(c'est comme la procédure à la main, sauf qu'on utilise 10^10 au lieu de
10^1 comme "base" )


Espérant que cela puisse être utile,
Vanderghast, Access MVP.


Claude Lesourd wrote in message <6kgejc$r1c$1...@platane.wanadoo.fr>...

pique-...@wanadoo.fr

unread,
May 28, 1998, 3:00:00 AM5/28/98
to

10096001510151820017300
ici je "découpe" le nbre de base par tranches de 5 ou de 3 mais c'est
valable pour tt découpage :
10096 00151 01518 20017 300
97 8 800151 01518 20017 300
95 9501518 20017 300
77 7720017 300
78
78300

21

clé 76 Il faut que la taille de la tranche de découpage choisie supporte
l'opération ou la précision du calcul (ou du calculateur) et là on peut
"diviser modulo" un nbre aussi grand soit-il


--
Amitiés du sud-ouest.
Phil des Landes - Icq : 146414
pique-...@wanadoo.fr - canaillp.citeweb.net
Claude Lesourd a écrit dans le message <6kgejc$r1c$1...@platane.wanadoo.fr>...

0 new messages