Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

modulo d'un nombre très grand

10 réponses
Avatar
thierry
Hello,

pour calculer la clef du numéro de sécurité social, je dois faire les 13
premiers chiffres modulo 97. Quand j'utilise la fonction mod, elle
m'annonce un dépassement de capacité (je suis obligé de stocker les 13
chiffres dans une donnée de type double). existe t'il une feinte, ou
bien suis je compètement bloqué?

cdt

Thierry

10 réponses

Avatar
LE TROLL
Salut,

Avec le double ou le Variant, moi, ça ne passe même pas 13 chiffres???
Faudrait voir du côté des mises en exposant, là je ne connais pas...

Dim Num As Double
Dim Reste As Double
Num = 1234567890123#
Reste = Num Mod 97
MsgBox Reste
' === dépasement de capacité...

Par contre mon n°SS, sa clef est 75, et si je cherche le reste de mon
n°SS(13 premiers chiffres) / 97 ça donne pas "75" en reste, mais alors pas
du tout!!! Pas au point...
Heu, pourquoi, ils t'ont donné le numéro mais pas la clef, les vaches, lol ?
---------

"thierry" a écrit dans le message de news:


Hello,

pour calculer la clef du numéro de sécurité social, je dois faire les 13
premiers chiffres modulo 97. Quand j'utilise la fonction mod, elle
m'annonce un dépassement de capacité (je suis obligé de stocker les 13
chiffres dans une donnée de type double). existe t'il une feinte, ou
bien suis je compètement bloqué?

cdt

Thierry


Avatar
Jean-Marc
"thierry" a écrit dans le message de
news:

Hello,

pour calculer la clef du numéro de sécurité social, je dois faire les 13
premiers chiffres modulo 97. Quand j'utilise la fonction mod, elle
m'annonce un dépassement de capacité (je suis obligé de stocker les 13
chiffres dans une donnée de type double). existe t'il une feinte, ou
bien suis je compètement bloqué?




Hello,

Il suffit de savoir ce qu'est un modulo. Le modulo r d'un chiffre n,
c'est le reste de la division entière de n par r. Une fois ceci acquis,
nul besoin d'être grand druide pour en déduire:

resultat = (n mod r) = n - (INT(n/r)*r)

d'ou la fonction suivante et un exemple d'appel:

Option Explicit

Private Function CalculModulo97(n As String) As Integer
Dim v As Double

v = CDbl(n)
CalculModulo97 = v - Int(v / 97) * 97
End Function

Private Sub Command1_Click()
Dim result As Integer
Dim s As String

s = "2998567890123"

result = CalculModulo97(s)
MsgBox "le modulo 97 de " & s & " est : " & vbCrLf & result
End Sub

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
YannX
Bnsr,

A part traiter la chaine de caractères (cf. J-M. )
on pourrait aussi utiliser "Currency" ou "Décimal"
types spécifiques Access qui gèrent assez de decimales,
mais pas forcement pérennes.....

Voir aussi un post dans le forum VB (ou Excel)
dans la semaine passée....
Bonne Nui
Y
"Jean-Marc" a écrit dans le message de
news:41af6174$0$7823$
"thierry" a écrit dans le message de
news:
>
> Hello,
>
> pour calculer la clef du numéro de sécurité social, je dois faire les 13
> premiers chiffres modulo 97. Quand j'utilise la fonction mod, elle
> m'annonce un dépassement de capacité (je suis obligé de stocker les 13
> chiffres dans une donnée de type double). existe t'il une feinte, ou
> bien suis je compètement bloqué?


Hello,

Il suffit de savoir ce qu'est un modulo. Le modulo r d'un chiffre n,
c'est le reste de la division entière de n par r. Une fois ceci acquis,
nul besoin d'être grand druide pour en déduire:

resultat = (n mod r) = n - (INT(n/r)*r)

d'ou la fonction suivante et un exemple d'appel:

Option Explicit

Private Function CalculModulo97(n As String) As Integer
Dim v As Double

v = CDbl(n)
CalculModulo97 = v - Int(v / 97) * 97
End Function

Private Sub Command1_Click()
Dim result As Integer
Dim s As String

s = "2998567890123"

result = CalculModulo97(s)
MsgBox "le modulo 97 de " & s & " est : " & vbCrLf & result
End Sub

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."




Avatar
thierry
In article <41af6174$0$7823$,
says...
"thierry" a écrit dans le message de
news:
>
> Hello,
>
> pour calculer la clef du numéro de sécurité social, je dois faire les 13
> premiers chiffres modulo 97. Quand j'utilise la fonction mod, elle
> m'annonce un dépassement de capacité (je suis obligé de stocker les 13
> chiffres dans une donnée de type double). existe t'il une feinte, ou
> bien suis je compètement bloqué?


Hello,

Il suffit de savoir ce qu'est un modulo. Le modulo r d'un chiffre n,
c'est le reste de la division entière de n par r. Une fois ceci acquis,
nul besoin d'être grand druide pour en déduire:

resultat = (n mod r) = n - (INT(n/r)*r)

d'ou la fonction suivante et un exemple d'appel:

Option Explicit

Private Function CalculModulo97(n As String) As Integer
Dim v As Double

v = CDbl(n)
CalculModulo97 = v - Int(v / 97) * 97
End Function

Private Sub Command1_Click()
Dim result As Integer
Dim s As String

s = "2998567890123"

result = CalculModulo97(s)
MsgBox "le modulo 97 de " & s & " est : " & vbCrLf & result
End Sub




c'est sur que dis comme ça c'est beaucoup plus simple.
Merci beaucoup
Avatar
jmn
Cadeaux bonux (norme IRIS B2 Avril 2000-B) :

2 - CLE TYPE 97
N° matricule assuré
Elle est calculée sur les 13 caractères significatifs :
diviser par 97 le nombre constitué par 13 caractères,
déterminer le complément à 97 du reste de cette division : il constitue la
clé.
Exemple : 1 29 02 78 551 031 : 97 = 13301840732
reste 27
complément : 97 - 27 = 70
la CLE est 70
NB : Pour les assurés nés en Corse, le couple 2A prend la valeur 19 pour le
calcul de la clé et le
couple 2B la valeur 18.


et
function ClefSS(byval numss13$) ' numss13 déjà rectifié de la NB précédente)
dim Src#,clef&,Cle$
src=val(numss13)
clef= 97 -(src-fix(src/97)*97))
cle=right("00" & trim(clef),2)

qui, je vous l'assure, marche très bien et pour de vrai (sinon mes clients
et les caisses m'auraient assassiné depuis longtemps !)
Avatar
thierry
In article <O$, "LE TROLL" <le
says...
Salut,

Avec le double ou le Variant, moi, ça ne passe même pas 13 chiffres???
Faudrait voir du côté des mises en exposant, là je ne connais pas...

Dim Num As Double
Dim Reste As Double
Num = 1234567890123#
Reste = Num Mod 97
MsgBox Reste
' === dépasement de capacité...

Par contre mon n°SS, sa clef est 75, et si je cherche le reste de mon
n°SS(13 premiers chiffres) / 97 ça donne pas "75" en reste, mais alors pas
du tout!!! Pas au point...
Heu, pourquoi, ils t'ont donné le numéro mais pas la clef, les vaches, lol ?
---------

"thierry" a écrit dans le message de news:

>
> Hello,
>
> pour calculer la clef du numéro de sécurité social, je dois faire les 13
> premiers chiffres modulo 97. Quand j'utilise la fonction mod, elle
> m'annonce un dépassement de capacité (je suis obligé de stocker les 13
> chiffres dans une donnée de type double). existe t'il une feinte, ou
> bien suis je compètement bloqué?
>
> cdt
>
> Thierry





il faut prendre les 13 premiers chiffres puis on fait modulo 97. on
prends ce résultat au quel on fait le complement à 97: voici un exemple
gracieusement offert par la CPAM de la MArne


Exemple : 1 29 02 78 551 031 : 97 = 13301840732

reste 27

complément : 97 - 27 = 70

la CLE est 70

NB : Pour les assurés nés en Corse, le couple 2A prend la valeur 19 pour
le
calcul de la clé et le couple 2B la valeur 18.


A +

Thierry
Avatar
LE TROLL
Chalut :o)
Faudrait préciser que tu prends seulement les 2 pemiers décimaux en l'état,
c'est pas paeil...
------

"jmn" a écrit dans le message de news:

Cadeaux bonux (norme IRIS B2 Avril 2000-B) :

2 - CLE TYPE 97
N° matricule assuré
Elle est calculée sur les 13 caractères significatifs :
diviser par 97 le nombre constitué par 13 caractères,
déterminer le complément à 97 du reste de cette division : il constitue la
clé.
Exemple : 1 29 02 78 551 031 : 97 = 13301840732
reste 27
complément : 97 - 27 = 70
la CLE est 70
NB : Pour les assurés nés en Corse, le couple 2A prend la valeur 19 pour
le
calcul de la clé et le
couple 2B la valeur 18.


et
function ClefSS(byval numss13$) ' numss13 déjà rectifié de la NB
précédente)
dim Src#,clef&,Cle$
src=val(numss13)
clef= 97 -(src-fix(src/97)*97))
cle=right("00" & trim(clef),2)

qui, je vous l'assure, marche très bien et pour de vrai (sinon mes clients
et les caisses m'auraient assassiné depuis longtemps !)




Avatar
LE TROLL
Sub Form_Load()
Dim r As Integer
Dim a
Dim ss As Double
'
a = InputBox("Saisir N°SS sans la clef")
ss = CDbl(a)
r = ss - Int(ss / 97) * 97
'
a = "N°SS = " & ss & vbLf
a = a & "Modulo de 97 = " & r & vbLf
a = a & "clef (97 - " & r & ") = " & 97 - r & vbLf
a = a & "N°SS+Clef = " & ss & " " & 97 - r & vbLf
MsgBox a
End Sub
' ----------

"thierry" a écrit dans le message de news:


Hello,

pour calculer la clef du numéro de sécurité social, je dois faire les 13
premiers chiffres modulo 97. Quand j'utilise la fonction mod, elle
m'annonce un dépassement de capacité (je suis obligé de stocker les 13
chiffres dans une donnée de type double). existe t'il une feinte, ou
bien suis je compètement bloqué?

cdt

Thierry


Avatar
ng
Salut,

on pourrait aussi utiliser "Currency" ou "Décimal"


Ces types existent aussi en vb (bien que pour le Decimal ce ne soit pas très
intuitif).
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

YannX wrote:
Bnsr,

A part traiter la chaine de caractères (cf. J-M. )
on pourrait aussi utiliser "Currency" ou "Décimal"
types spécifiques Access qui gèrent assez de decimales,
mais pas forcement pérennes.....

Voir aussi un post dans le forum VB (ou Excel)
dans la semaine passée....
Bonne Nui
Y
"Jean-Marc" a écrit dans le message de
news:41af6174$0$7823$
"thierry" a écrit dans le message de
news:

Hello,

pour calculer la clef du numéro de sécurité social, je dois faire
les 13 premiers chiffres modulo 97. Quand j'utilise la fonction
mod, elle m'annonce un dépassement de capacité (je suis obligé de
stocker les 13 chiffres dans une donnée de type double). existe
t'il une feinte, ou bien suis je compètement bloqué?




Hello,

Il suffit de savoir ce qu'est un modulo. Le modulo r d'un
chiffre n, c'est le reste de la division entière de n par r. Une
fois ceci acquis, nul besoin d'être grand druide pour en déduire:

resultat = (n mod r) = n - (INT(n/r)*r)

d'ou la fonction suivante et un exemple d'appel:

Option Explicit

Private Function CalculModulo97(n As String) As Integer
Dim v As Double

v = CDbl(n)
CalculModulo97 = v - Int(v / 97) * 97
End Function

Private Sub Command1_Click()
Dim result As Integer
Dim s As String

s = "2998567890123"

result = CalculModulo97(s)
MsgBox "le modulo 97 de " & s & " est : " & vbCrLf & result
End Sub

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."




Avatar
Patrice Henrio
La fonction modulo a des propriétés très intéressantes d'addition et de
multiplication
ainsi
mod(a+b,c) vaut mod(mod(a,c)+mod(b,c),c)
de même pour la multiplication
cela permet de remplacer n'importe quel grand nombre en décomposant son
écriture ne base 10 (ses chiffres quoi), ou même en groupant n'importe
lesquels de ses chiffres du moment que le résultat ne soit pas trop grand

1540985151031 = 1*100*100*100*100*100+ 54*100*100*100*100 + 9 *100*100*100 +
85*100*100+ 10*100+31
ou encore
31+100*(10+100*(15+100*(85+100*(9+100*(54+100*1)))))
donc mod(1540985151031 , 97) sera identique à
mod(31 , 97)+mod(100,97) *(mod(10 , 97)+mod(100,
97)*(mod(15,97)+mod(100,97)*(mod(85,97)+mod(100,97)*(mod(9,97)+mod(100,97)*(mod(54,97)+mod(100,97)*mod(1,97))))))
le tout modulo 97

donc
mod(31+3*(10+3*(15+3*(85+3*(9+3*(54+3*1)))),97)

mod(100,97) vaut 3 car 100—+3

soit mod(31+3*(10+3*(15+3*(85+3*(9+3*57)))),97)

en fait on remplace au fur et à mesure par les restes de la division par 97

3*571t mod 97
74+9ƒ mod 97
3* 83 = 249 = 55 mod 97
55 + 85 = 140 = 43 mod 97
3*43 = 1292 mod 97
15+32G mod 97
3*471D mod 97
10+44T mod 97
3*542e mod 97
31 + 65= 96 mod 97


"LE TROLL" <le a écrit dans le message de news:

Sub Form_Load()
Dim r As Integer
Dim a
Dim ss As Double
'
a = InputBox("Saisir N°SS sans la clef")
ss = CDbl(a)
r = ss - Int(ss / 97) * 97
'
a = "N°SS = " & ss & vbLf
a = a & "Modulo de 97 = " & r & vbLf
a = a & "clef (97 - " & r & ") = " & 97 - r & vbLf
a = a & "N°SS+Clef = " & ss & " " & 97 - r & vbLf
MsgBox a
End Sub
' ----------

"thierry" a écrit dans le message de news:


Hello,

pour calculer la clef du numéro de sécurité social, je dois faire les 13
premiers chiffres modulo 97. Quand j'utilise la fonction mod, elle
m'annonce un dépassement de capacité (je suis obligé de stocker les 13
chiffres dans une donnée de type double). existe t'il une feinte, ou
bien suis je compètement bloqué?

cdt

Thierry