Calcul CHECKSUM

RPG (3 et 4, free), CL, SQL, etc...
Répondre
ctalhouet
Messages : 42
Enregistré le : mar. 05 juin 2007, 12:48:27

Calcul CHECKSUM

Message par ctalhouet »

BOnjour
Cherche specialiste pour m'aider dans calcul Checksum en RPGLE
(ASCII HEXA.....) .

C TALHOUET
BERNARD/JEAN FLOC'H
02 97 61 66 21

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

CHECKSUM

Message par cmasse »

Bonjour,

Vous me dites, au téléphone, que le CHECKSUM calculé doit être la somme des différents octets dont on ne garde que la partie droite :

Exemple x'02414243454546' (41=A en ASCII = 65 en décimal, 46 = 66, etc...)

la somme de tout cela doit faire 407, soit x'197', dont on ne garde que 97.

je vous propose le code suivant (qui fonctionne en debug)

Code : Tout sélectionner

     dchaine           S             40    inz(x'02414243444546')
     di                S              5  0
      * pour placer un octet et le considérer comme une donnée binaire
     duncar            DS
     d binaire                        3u 0
      * pour faire la somme et ne conserver que l'octet le plus à droite
     dchecksumDS       DS
     d somme                         10u 0
     d checksum                       1    overlay(checksumDS:4)
     dreponse          S              1
      /free
       somme = 0;
       for i = 1 to %len(%trim(chaine));
         uncar = %subst(chaine:i:1);
         somme += binaire;
       ENDFOR;
       // checksum contient 97
       reponse= checksum;
       *inLR = *on;
      /end-free 
si vous devez isoler les caractères 9 et 7, le code suivant doit le faire

Code : Tout sélectionner

     uncar = checksum;
     c1 = %char(%div(binaire : 16));
     c2 = %char(%rem(binaire : 16));
Christian Massé (Volubis.fr)

Répondre