Probleme de calcule ou bug ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Ghost911
Niveau 5
Niveau 5
Messages : 166
Enregistré le : mar. 21 oct. 2008 17:57
Localisation : Bordeaux
Status : Hors ligne

Probleme de calcule ou bug ?

#1

Message par Ghost911 »

Bonjour je viens de reprendre autoit cela fais longtemps que j'ai plus pratiquer $math ne renvoie pas le bon résultat je sais pas si c'est moi ou si c'est autoit merci de votre aide normalement 6-4=2 autoit me renvoie 6 donc je comprend pas !

Code : Tout sélectionner

$Num="89304402523905652748447801781"
$result=Mod($Num,97)
$recup=StringSplit ($result,"")
$math=Number ($recup [1]&"-"&$recup [2])
$key=Number ($result&"+"&$math)
MsgBox (0,"",$result)
MsgBox (0,"",$key)
MsgBox (0,"",$math)
Modifié en dernier par Ghost911 le sam. 01 sept. 2018 11:31, modifié 1 fois.
Avatar du membre
Ghost911
Niveau 5
Niveau 5
Messages : 166
Enregistré le : mar. 21 oct. 2008 17:57
Localisation : Bordeaux
Status : Hors ligne

Re: Probleme de calcule

#2

Message par Ghost911 »

bug ou manque de compréhension de ma part ?
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Probleme de calcule ou bug ?

#3

Message par jchd »

Il y a plusieurs erreurs dans ce code.

Déjà, la valeur maximale d'un entier positif (63 bits) est :
ConsoleWrite(0x7fffffffffffffff & @LF) ; 9223372036854775807 Max Int64
Donc la valeur pour laquelle il s'agit de trouver la clé est bien trop grande pour ce type d'approche.

Une seule solution : l'UDF BigNum.au3. Exemple de code (algo de base peut-être faux) :

Code : Tout sélectionner

#include "..\include\BigNum.au3"

Local $sNum = "89304402523905652748447801781"
Local $iResult = Int(_BigNum_Mod($sNum, "97"))
Local $iMath = Int($iResult / 10) - Mod($iResult, 10)
Local $iKey = $iResult + $iMath
MsgBox(0, "", $iResult)
MsgBox(0, "", $iMath)
MsgBox(0, "", $iKey)
De ce fait le reste du code ne convient plus, mais il ne convenait déjà pas.
$math = Number($recup[1] & "-" & $recup[2]) évaluait Number("6" & "-" & "4"), soit Number("6-4"), qui vaut 6.
Il aurait suffit de :
$math = $recup[1] - $recup[2]
Idem pour la ligne en-dessous.

Autre problème : je pense que l'algorithme est incorrect car si (comme avec le nombre fourni) le modulus est < 10 (ici il vaut 3) ou s'il est de la forme XY avec Y > X on obtient une valeur négative.
Je ne sais pas quelle est cette version de check-digit Mod 97 mais perso je vérifierais à deux fois l'origine de l'algo.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre