Ver Mensaje Individual
  #21
Antiguo 3 de octubre de 2021, 21:38
Dasije
Forero Senior
Última Actividad 06.03.2022 17:04
Posts Posts: 173
Likes enviados Enviados: 1
Likes recibidos Recibidos: 79

Hola @Kuk.

Te dejo el código para NetCOBOL, no hacía falta la directiva para el binario, pero si mover el resultado una PIC 9(3) sin COMP-5, a pelo, entonces si se ve correctamente el resultado, cosas del compilador.

Código COBOL:
  1.  program-id. "CRC8".
  2.  
  3.  environment division.
  4.  configuration section.
  5.  
  6.  data division.
  7.  working-storage section.
  8.  
  9.   01 CRC8-Table.
  10.       05 filler occurs 256.
  11.          10 tbByte            PIC X(1).
  12.        
  13.   01 cadena                   PIC X(256) VALUE
  14.      "https://batuz.eus/QRTBAI/?id=TBAI-00000006Y-251019-btFpwP8dcLGAF-237&s=T&nf=27174&i=4.70".
  15.   01 len                      PIC 9(2) COMP-5.
  16.   01 crc                      PIC X(1).
  17.   01 crcNum redefines crc     PIC 9(2) comp-5.
  18.  
  19.   01 crc_resultado            PIC 9(3) VALUE ZEROS.
  20.        
  21.   01 idx-1                    PIC 9(2) COMP-5.
  22.      
  23.   01 tmpChar                  PIC X(1).
  24.   01 tmpIdx redefines tmpChar PIC 9(2) COMP-5.
  25.  
  26.   01 valor_XOR_AND            PIC X(1) VALUE X"FF".
  27.  
  28.   procedure division.
  29.  
  30.       perform chargeTable
  31.       perform getLen
  32.            
  33.       move 1 to idx-1
  34.       move 0 to crcNum
  35.            
  36.       perform until idx-1 > len
  37.               move cadena(idx-1:1) to tmpChar
  38.                
  39.               call "CBL_XOR" using crcNum tmpIdx by value 1
  40.               call "CBL_AND" using valor_XOR_AND tmpIdx by value 1
  41.                
  42.               move tbByte(tmpIdx + 1) to crc
  43.                
  44.               add 1 to idx-1
  45.       end-perform
  46.            
  47.       call "CBL_AND" using valor_XOR_AND crcNum by value 1
  48.            
  49.       move crcNum to crc_resultado      
  50.  
  51.       display crc_resultado      
  52.  
  53.       goback.
  54.  
  55.  chargeTable.
  56.       string X"00", X"07", X"0E", X"09", X"1C", X"1B", X"12",
  57.              X"15", X"38", X"3F", X"36", X"31", X"24", X"23",
  58.              X"2A", X"2D", X"70", X"77", X"7E", X"79", X"6C",
  59.              X"6B", X"62", X"65", X"48", X"4F", X"46", X"41",            
  60.              X"54", X"53", X"5A", X"5D", X"E0", X"E7", X"EE",
  61.              X"E9", X"FC", X"FB", X"F2", X"F5", X"D8", X"DF",
  62.              X"D6", X"D1", X"C4", X"C3", X"CA", X"CD", X"90",
  63.              X"97", X"9E", X"99", X"8C", X"8B", X"82", X"85",
  64.              X"A8", X"AF", X"A6", X"A1", X"B4", X"B3", X"BA",
  65.              X"BD", X"C7", X"C0", X"C9", X"CE", X"DB", X"DC",
  66.              X"D5", X"D2", X"FF", X"F8", X"F1", X"F6", X"E3",
  67.              X"E4", X"ED", X"EA", X"B7", X"B0", X"B9", X"BE",
  68.              X"AB", X"AC", X"A5", X"A2", X"8F", X"88", X"81",
  69.              X"86", X"93", X"94", X"9D", X"9A", X"27", X"20",
  70.              X"29", X"2E", X"3B", X"3C", X"35", X"32", X"1F",
  71.              X"18", X"11", X"16", X"03", X"04", X"0D", X"0A",
  72.              X"57", X"50", X"59", X"5E", X"4B", X"4C", X"45",
  73.              X"42", X"6F", X"68", X"61", X"66", X"73", X"74",
  74.              X"7D", X"7A", X"89", X"8E", X"87", X"80", X"95",
  75.              X"92", X"9B", X"9C", X"B1", X"B6", X"BF", X"B8",
  76.              X"AD", X"AA", X"A3", X"A4", X"F9", X"FE", X"F7",
  77.              X"F0", X"E5", X"E2", X"EB", X"EC", X"C1", X"C6",
  78.              X"CF", X"C8", X"DD", X"DA", X"D3", X"D4", X"69",
  79.              X"6E", X"67", X"60", X"75", X"72", X"7B", X"7C",
  80.              X"51", X"56", X"5F", X"58", X"4D", X"4A", X"43",
  81.              X"44", X"19", X"1E", X"17", X"10", X"05", X"02",
  82.              X"0B", X"0C", X"21", X"26", X"2F", X"28", X"3D",
  83.              X"3A", X"33", X"34", X"4E", X"49", X"40", X"47",
  84.              X"52", X"55", X"5C", X"5B", X"76", X"71", X"78",
  85.              X"7F", X"6A", X"6D", X"64", X"63", X"3E", X"39",
  86.              X"30", X"37", X"22", X"25", X"2C", X"2B", X"06",
  87.              X"01", X"08", X"0F", X"1A", X"1D", X"14", X"13",
  88.              X"AE", X"A9", X"A0", X"A7", X"B2", X"B5", X"BC",
  89.              X"BB", X"96", X"91", X"98", X"9F", X"8A", X"8D",
  90.              X"84", X"83", X"DE", X"D9", X"D0", X"D7", X"C2",
  91.              X"C5", X"CC", X"CB", X"E6", X"E1", X"E8", X"EF",
  92.              X"FA", X"FD", X"F4", X"F3"
  93.              delimited by size into CRC8-Table.
  94.  
  95.  getLen.
  96.  
  97.       move 88 to len
  98.  
  99.      *> Fujitsu: function stored-cahr-length
  100.     *> Otros: un bucle, unstring con x"00" o NOT = SPACES etc.
  101.             .
  102.  
  103.  end program CRC8.

El resultado en este caso debe ser 007 por tener otro string diferente, compruébalo en el ejemplo de Java, y así debe ser.

He comprobado los compiladores online, en ambos casos funciona correctamente.

Saludos y gracias.



Empresa de desarrollo de aplicaciones en COBOL.

DASIJE INFORMATICA, S.L.
C/ TOMAS BRETON 20
11406 JEREZ DE LA FRONTERA
CADIZ

Teléfono : 956 11 21 11
Web: http://www.dasije.es / DASIJE INFORMATICA
E-m@il: clientes(@)dasije.es
Dasije is offline   Responder Con Cita