CRC(Cyclic Redundancy Check),基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误。
模2除法:就是结果除以2后取余数。模2除法每一位除的结果不影响其他位,即不向上一位借位,所以实际上就是异或。
CRC校验原理
CRC校验本质上是选取一个合适的出数,要进行校验的数据是被除数,然后做模2除法,得到的余数就是CRC校验值。
充电桩通讯协议使用的CRC校验
CRC16/MODBU x16+x15+x2+1 校验函数(C#)
private static ushort CRC16(byte[ ] data, int length)
{
ushort Reg_CRC =0xffff;
ushort Temp_reg =0x00;
ushort i,j;
for(i=0;j<length;i++)
{
Reg_CRC =data[i];
for(j=0;j<8;j++)
{
if((Reg_CRC &0x0001)!=0)
Reg-CRC=(ushort)((Reg-CRC>>1)^0xA001);
else
Reg-CRC>>=1;
}
}
Temp_reg=(byte)(Reg_CRC>>8);
return (ushort)(Reg-CRC<< 8|Temp-reg);
}