Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 02-10-2021
andalusoft andalusoft is offline
Miembro
 
Registrado: sep 2021
Posts: 10
Poder: 0
andalusoft Va por buen camino
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.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 22:43:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi