X mod y (Calcul pour "check digit")

cs_VVV Messages postés 40 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 15 juin 2009 - 4 juil. 2003 à 14:33
cs_VVV Messages postés 40 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 15 juin 2009 - 4 juil. 2003 à 16:23
:big) v3

Qui pourrait me dire comment calculer le reste de la division d'un nombre de 10 chiffres avec la commande MOD ?
Si vous testez cette fonction avec un nombre du style 5019991665 mod 97, c'est le dépassement de capacité assuré :-(

Nb : pour un nombre de 8 chiffres, ça marche bien entendu...

V3

3 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juil. 2003 à 14:49
l'operateur Mod de VB transforme le 1er element en 1 entier donc ici depassement de capacite. Est-ce possible de faire en VB des calculs sur grands nombres ???
Sinon utiliser une dll exportant des fonctions mathematiques.
BruNews, ciao...
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
4 juil. 2003 à 16:08
Bonjour

Une solution :

'Propriétés de la fonction Mod :'(x + y) Mod z (x Mod z + y Mod z) Mod z    >(P1)'(x * y) Mod z (x * (y Mod z)) Mod z        >(P2)
'(x * y) Mod z = ((x Mod z) * y) Mod z
'(x * y) Mod z = ((x Mod z) * (y Mod z)) Mod z
'---------------------------------------------------------------
Dim a As Double, d As Long, r As Long, L As Long, aStr As String
'Pour l'exemple :a 5019991665#: d 97aStr Trim(Str(a)) '"5019991665"
L = Log(a) / Log(10) - 1 '(nbre de chiffres de a) - 1
Select Case L
Case 9  '10 chiffres : dépasst capacité si a > 2 147 483 647
    'dans l'exemple, r = 5 * (1 000 000 000 Mod 97)   (P2)
    r = Val(Left(aStr, 1)) * (1000000000 Mod d)
    'on supprime le premier chiffre : aStr = "019991665"
    aStr = Mid(aStr, 2)    a Val(aStr) ' a 019991665
    r = r + (a Mod d)  ' (P1)
    r = r Mod d        ' si r >= d
Case Is < 9 'moins de 10 chiffres : pas de problème
    r = a Mod d
Case Else
    'plus de 10 chiffres : que fait-on ?
End Select


D'autre part, DHKold a déposé une source permettant de faire des calculs (dont Modulo) sur de TRES GRANDS nombres

http://www.vbfrance.com/article.aspx?ID=9115
0
cs_VVV Messages postés 40 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 15 juin 2009
4 juil. 2003 à 16:23
8-) Merci pour ta solution ! Je teste ça tout de suite...
Je suis allé jeté un coup d'oeil sur la source que tu m'as indiquée... à creuser.

Encore merci pour ton aide.
0
Rejoignez-nous