CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
1 byte checksum
CRC-16
CRC-16 (Modbus)
CRC-16 (Sick)
CRC-CCITT (XModem)
CRC-CCITT (0xFFFF)
CRC-CCITT (0x1D0F)
CRC-CCITT (Kermit)
CRC-DNP
CRC-32
这里我以CRC-CCITT (XModem) 为例,分别用计算方法与查表法来实现
1.计算法
public static int CRC_XModem(byte[] bytes){
int crc = 0x00; // initial value
int polynomial = 0x1021;
for (int index = 0 ; index< bytes.length; index++) {
byte b = bytes[index];
for (int i = 0; i < 8; i++) {
boolean bit = ((b >> (7-i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit) crc ^= polynomial;
}