- 循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。循环冗余校验码常用于外存储器和计算机同步通信的数据校验。奇偶校验码和海明校验码都是采用奇偶检测为手段检错和纠错的(奇偶校验码不具有纠错能力),而循环冗余校验则是通过某种数学运算来建立数据位和校验位的约定关系的。
- 这里我用CRC-16/MODBUS作为例子,多项式 POLY(Hex):8005,初始值INIT(Hex):FFFF,结果异或值XOROUT(Hex):0000,具体代码如下:
def crc16Add(read):
crc16 = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0xFFFF, xorOut=0x0000)
data = read.replace(" ", "")
readcrcout = hex(crc16(unhexlify(data))).upper()
str_list = list(readcrcout)
if len(str_list) == 5:
str_list.insert(2, '0')
crc_data = "".join(str_list)
crc_data = int(crc_data[2:],16)
crc_data = "%04x" % crc_data
read = read.strip() + crc_data
print('增加Modbus_CRC16校验:>>>', read)
return read