![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#11
|
|||
|
|||
|
Calculo CRC-8
Hola a tod@s.
Os dejo código fuente para calcular el CRC-8: MICROFOCUS COBOL: $set sourceformat(variable) program-id. CRC8 as "CRC8". environment division. configuration section. data division. working-storage section. 01 CRC8-Table. 05 filler occurs 256. 10 tbByte PIC X(1). 10 tbByteNum redefines tbByte PIC S9(2) COMP-5. 01 cadena PIC X(256) VALUE "TBAI-00000006Y-251019-btFpwP8dcLGAF-". 01 len PIC 9(2) COMP-5. 01 crc PIC X(1). 01 crcNum redefines crc PIC 9(2) comp-5. 01 crcNumInt PIC S9(9) COMP-5. 01 idx-1 PIC 9(2) COMP-5. 01 tmpChar PIC X(1). 01 tmpIdx redefines tmpChar PIC S9(2) COMP-5. 01 tmpIdxInt PIC S9(9) COMP-5. procedure division. perform chargeTable perform getLen move 1 to idx-1 move 0 to crcNumInt perform until idx-1 > len move cadena(idx-1:1) to tmpChar move tmpIdx to tmpIdxInt call "CBL_XOR" using crcNumInt tmpIdxInt by value 4 display tmpIdxInt " " no advancing call "CBL_AND" using X"FF000000" tmpIdxInt by value 4 display tmpIdxInt " " tbByteNum(tmpIdxInt + 1) " " no advancing move tbByte(tmpIdxInt + 1) to crc move crcNum to crcNumInt display crcNumInt " " add 1 to idx-1 end-perform call "CBL_AND" using X"FF000000" crcNumInt by value 4 display crcNumInt move crcNumInt to crcNum display crcNum " " crc 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 36 to len *> Fujitsu: function stored-cahr-length *> Otros: un bucle, unstring con x"00" o NOT = SPACES etc. . end program CRC8. WINDEV: PROCEDURE calcular_CRC8(Cadena is UNICODE string) CRC8_Table is array of byte = [0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD, 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A, 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34, 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13, 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3] Idx_1 is int = 1 Len is int = Length(Cadena) TmpIdx is bytes = 0 CrcNum is byte = 0 CRC is UNICODE string = "" Cadena = StringToUTF8(Cadena,charsetUTF8) FOR Idx_1 = 1 TO Len TmpIdx = Asc(Middle(Cadena,Idx_1,1)) TmpIdx = BinaryXOR(CrcNum,TmpIdx) TmpIdx = BinaryAND(0xFF,TmpIdx) CrcNum = CRC8_Table[TmpIdx + 1] END CrcNum = BinaryAND(0xFF,CrcNum) CRC = NumToString(CrcNum,"%03d") RESULT = CRC Saludos y gracias por todo. |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice | newtron | Internet | 3716 | 19-01-2026 20:01:34 |
| Como utilizar la ayuda del nuevo Sistema Operativo | gluglu | Humor | 3 | 24-09-2007 09:39:05 |
| Aplicacion Agencia De Viajes | ArdiIIa | Varios | 9 | 20-01-2007 16:49:53 |
| El Vasco Aguirre | Al González | La Taberna | 5 | 26-05-2006 09:22:28 |
| Microsoft ha lanzado su nuevo sistema operativo | DarkByte | Humor | 0 | 25-01-2004 09:21:14 |
|