校验
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 CRC算法参数模型解释:  NAME:参数模型名称。  WIDTH:宽度,即CRC比特数。  POLY:生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7。  INIT:这是算法开始时寄存器(crc)的初始化预置值,十六进制表示。  REFIN:待测数据的每个字节是否按位反转,True或False。  REFOUT:在计算后之后,异或输出之前,整个数据是否按位反转,True或False。  XOROUT:计算结果与此参数异或后得到最终的CRC值。
BCC(Block Check Character/信息组校验码),因校验码是将所有数据异或得出,故俗称异或校验。具体算法是:将每一个字节的数据(一般是两个16进制的字符)进行异或后即得到校验码。  例如16进制数据:01 A0 7C FF 02  计算:01 xor A0 xor 7C xor FF xor 02 = 20  校验码是:20 
纵向冗余校验(Longitudinal Redundancy Check,简称:LRC)是通信中常用的一种校验形式,也称LRC校验或纵向校验。它是一种从纵向通道上的特定比特串产生校验比特的错误检测方法。在行列格式中(如磁带),LRC经常是与VRC一起使用,这样就会为每个字符校验码。在工业领域Modbus协议Ascii模式采用该算法。  具体算法如下:  1、对需要校验的数据(2n个字符)两两组成一个16进制的数值求和。  2、将求和结果与256求模。  3、用256减去所得模值得到校验结果(另一种方法:将模值按位取反然后加1)。  例如16进制数据:01 A0 7C FF 02  (16进制计算)  求和:01 + A0 + 7C + FF + 02 = 21E  取模:21E % 100 = 1E  计算:100 - 1E = E2  (10进制计算)  求和:01 + 160 + 124 + 255 + 02 = 542  取模:542 % 256 = 30  计算:256 - 30 = 226