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