Sujet : Re: Modulo tout retourné dans les clefs
De : om+news (at) *nospam* miakinen.net (Olivier Miakinen)
Groupes : fr.sci.mathsDate : 04. Sep 2021, 08:34:43
Autres entêtes
Organisation : There's no cabale
Message-ID : <sgv423$2ia$1@cabale.usenet-fr.net>
References : 1 2 3 4 5
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 SeaMonkey/2.49.4
Le 04/09/2021 01:46, Benoit a écrit :
2e cas : deux chiffres sont erronés.
>
Voici un exemple d'erreur possible : ajouter 1 à un chiffre du code INSEE
(par exemple le passer de 1 à 2 ou de 5 à 6), et simultanément ajouter 7
au chiffre qui se trouve cinq rangs plus loin (par exemple le passer de 0
à 7 ou de 2 à 9). Ceci est possible parce que 100007 est un multiple de
97 (c'est 1031 fois 97). Cette erreur peut concerner 8 paires de chiffres
d'un nombre de 13 chiffres. Par ailleurs, elle peut concerner 9 valeurs
du premier chiffre (de 0 à 8) et 3 valeurs de l'autre chiffre (de 0 à 2).
L'erreur associée au nombre 100007 doit donc être comptée 216 fois car
8×9×3 = 216.
N’y a-t-il pas :
— 3 007 : 97 x 31 ==> 10 x 7 x 3 = 210 erreurs
— 7 000 005 : 97 x 72 165 ==> 7 x 3 x 5 = 105 erreurs
- 50 000 008 : 97 x 515464 ==> 6 X 5 X 2 = 60 erreurs
Oui. Bien vu, et bien calculé. Outre 100 007, les nombres 3 007, 7 000 005
et 50 000 008 sont les seuls pour lesquels le changement de deux chiffres
*dans le même sens* est une erreur indétectable. Et tu as bien calculé le
nombre de possibilités pour chaque.
Mais il ne faut pas oublier que l'on peut aussi *augmenter* un chiffre tout
en *diminuant* un autre chiffre. Cela veut dire qu'en plus de chercher les
multiples de 97 de la forme (d1 × 10^n + d2) il faut aussi considérer ceux
de la forme (d1 × 10^n - d2).
Voir la liste (sortie de mon programme) en fin de cet article.
375 erreurs potentielles. Pas beaucoup, mais pour une fois c’est mieux
d’avoir un 0 en maths :)
:-D
Puis 60 000 000 000 007 mais 14 chiffres et je ne sais aller au-delà
avec mon bon vieil Excel.
J'aurais pu aller plus loin avec Python, mais je me suis arrêté aux 13
chiffres du numéro de sécurité sociale.
[...]
Pour les numéros de cartes bancaires c’est la Formule de Luhn qui est
utilisée, mais là je ne sais pas comment calculer pour le problème
énoncé ci-dessus. Si le résultat doit être un multiple de 10 je ne vois
pas comment cela peut être plus sûr.
<https://fr.wikipedia.org/wiki/Formule_de_Luhn>
Merci, je vais aller lire ça.
Maintenant la sortie de mon programme pour le modulo 97 dans un code à
13 chiffres :
========================================
$ code_correcteur.py 97
97 ←11→ +1 -3
11×9×7 = 693
194 ←11→ +2 -6
11×8×4 = 352
291 ←11→ +3 -9
11×7×1 = 77
3007 ←10→ +3 +7
10×7×3 = 210
9991 ←9→ +1 -9
9×9×1 = 81
100007 ←8→ +1 +7
8×9×3 = 216
7000005 ←7→ +7 +5
7×3×5 = 105
50000008 ←6→ +5 +8
6×5×2 = 60
89999995 ←6→ +9 -5
6×1×5 = 30
599999999 ←5→ +6 -1
5×4×9 = 180
2999999995 ←4→ +3 -5
4×7×5 = 140
19999999999 ←3→ +2 -1
3×8×9 = 216
39999999998 ←3→ +4 -2
3×6×8 = 144
59999999997 ←3→ +6 -3
3×4×7 = 84
79999999996 ←3→ +8 -4
3×2×6 = 36
99999999995 ←2→ +1 -5
2×9×5 = 90
1999999999997 ←1→ +2 -3
1×8×7 = 56
3999999999994 ←1→ +4 -6
1×6×4 = 24
5999999999991 ←1→ +6 -9
1×4×1 = 4
Total pour 97 = 2798
========================================
Tant que j'y suis, le résultat pour 93 :
========================================
$ code_correcteur.py 93
93 ←11→ +1 -7
11×9×3 = 297
3999 ←10→ +4 -1
10×6×9 = 540
7998 ←10→ +8 -2
10×2×8 = 160
19995 ←9→ +2 -5
9×8×5 = 360
399993 ←8→ +4 -7
8×6×3 = 144
2999994 ←7→ +3 -6
7×7×4 = 196
79999995 ←6→ +8 -5
6×2×5 = 60
90000006 ←6→ +9 +6
6×1×4 = 24
499999992 ←5→ +5 -8
5×5×2 = 50
600000009 ←5→ +6 +9
5×4×1 = 20
5999999997 ←4→ +6 -3
4×4×7 = 112
69999999996 ←3→ +7 -4
3×3×6 = 54
499999999998 ←2→ +5 -2
2×5×8 = 80
999999999996 ←1→ +1 -4
1×9×6 = 54
1999999999992 ←1→ +2 -8
1×8×2 = 16
Total pour 93 = 2167
========================================
Et les résultats non détaillés (juste le total) pour tous les nombres à
deux chiffres qui sont premiers avec 10 :
========================================
$ code_correcteur.py 10 99
Total pour 11 = 15786
Total pour 13 = 17330
Total pour 17 = 15973
Total pour 19 = 14645
Total pour 21 = 13398
Total pour 23 = 11750
Total pour 27 = 12342
Total pour 29 = 8928
Total pour 31 = 8316
Total pour 33 = 13320
Total pour 37 = 10186
Total pour 39 = 7220
Total pour 41 = 7436
Total pour 43 = 5716
Total pour 47 = 5296
Total pour 49 = 5487
Total pour 51 = 5130
Total pour 53 = 4168
Total pour 57 = 4371
Total pour 59 = 4920
Total pour 61 = 3499
Total pour 63 = 4608
Total pour 67 = 4457
Total pour 69 = 3918
Total pour 71 = 3441
Total pour 73 = 5673
Total pour 77 = 7282
Total pour 79 = 2491
Total pour 81 = 3494
Total pour 83 = 2863
Total pour 87 = 3541
Total pour 89 = 2669
Total pour 91 = 6666
Total pour 93 = 2167
Total pour 97 = 2798
Total pour 99 = 10290
Meilleur total : 2167 pour 93
========================================
Cordialement,
-- Olivier Miakinen