ГОСТ Р ИСО/МЭК 14443-3-2014
void ComputeCrc(int CRCType. char ’Data, int Length.
BYTE ‘TransmitFirst. BYTE “TransmitSecond)
<
unsignedchar chBJock;
unsigned shortwCrc;
switch(CRCType) {
caseCRC_A:
wCrc = 0x6363;
Г
ITU-V.417
break;
case CRC_B:
wCrc =OxFFFF; /* ISO/IEC 13239(formerly ISO/IEC 3309) V
break;
default:
chBlock= ‘Data++;
UpdateCrc(chBlock. &wCrc);
} while (-Length);
if (CRCType == CRC_B)
wCrc = -wCrc: /* ISO/IEC 13239(formerly ISO/IEC 3309) V
‘TransmitFirst =(BYTE)(wCrc & OxFF);
’TransmitSecond = (BYTE)((wCrc » 8)& OxFF);
return;
)
BYTE BuffCRC_A[10) = (0x12. 0x34);
BYTE BuffCRC_B(10] = (0x0A. 0x12. 0x34. 0x56};
unsigned short Crc:
BYTE First. Second;
FILE *OutFd:
inti;
intmain(void)
{
printf("CRC-16 reference results ISO/IEC 14443-3\n");
pfintf(”Crc-16 G(x)= xA16 + хл12+ xA5 + 1\n\n*);
printf("CRC_Aof (“);
for(i=0; i<2; i++)printfC%02X*.BuffCRC_Ali]);
ComputeCrc(CRC_A. BuffCRC_A. 2. &First. SSecond);
printf("j Transmitted: %02X then %02X.\n". First. Second);
printf("CRC_Bof [");
for(i=0; i<4; И-+)printf(’%02X”.BuffCRC_Blil);
ComputeCrc(CRC_B. BuffCRC_B. 4. &First. &Second);
printf(")Transmitted: %02X then %02X.\n". First. Second);
retum(O):
53