testé avec : 30003003930003728602468152776
- Code : Tout sélectionner
Sub Initialize
Print Modulo("068999999501111443", "97")
End Sub
Function Modulo(num As String, par As String)
Dim lft As String, rgt As String
Dim l As Integer
l= Len(par)
lft= Left$(num, l)
rgt= Mid$(num, l+1)
Do
Call Modulo2(lft, par)
lft= lft + Left$(rgt, 1)
rgt= Mid$(rgt, 2)
Loop While rgt<>""
Call Modulo2(lft, par)
Modulo= lft
End Function
Sub Modulo2(n1 As String, n2 As String)
' the ugly way...
n1= Cstr(Clng(n1) Mod Clng(n2))
End Sub
- Code : Tout sélectionner
Function ModuloBigNumber(wNumber As String, wnbDiviseur As Long) As Integer
'cette fonction permet de faire un modulo sur un tres grand nombre entier ne pouvant pas être géré par la functon Mod
Dim LeftNumber As String
Dim RightNumber As String
Dim i As Integer
On Error Goto ErreurHandle
If Trim(wNumber) = "" Then
ModuloBigNumber = -1
Exit Function
End If
'vérifie qu'il n'y que des chiffres
If wNumber Like "*[!0-9]*" Then
ModuloBigNumber = -1
Exit Function
End If
i = Len(Cstr(wnbDiviseur))
LeftNumber = Left(wNumber, i)
RightNumber = Mid(wNumber, i+1)
Do
LeftNumber = Cstr(Clng(LeftNumber) Mod wnbDiviseur)
LeftNumber= LeftNumber + Left(RightNumber, 1)
RightNumber= Mid(RightNumber, 2)
Loop While RightNumber<>""
ModuloBigNumber = Clng(LeftNumber) Mod wnbDiviseur
RightNumber = ""
LeftNumber = ""
Exit Function
ErreurHandle:
Msgbox "("+Cstr(Getthreadinfo (1))+" Call by "+Cstr(Getthreadinfo(10))+")"+Chr(10)+"Erreur " + Str(Err) + " : "+Chr(10) + Cstr(Error)+". "+Chr(10)+"Ligne N° "+Cstr(Erl),16," ERREUR !"
ModuloBigNumber = -1
Exit Function
End Function