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.
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>...
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>...