[技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码
1.CRC、FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。 FCS,全称Frame Check Sequence,中文名称为帧校验序列,俗称帧尾,即计算机网络数据链路层的协议数据单元(帧)的尾部字段,是一段4个字节的循环冗余校验码。 注:CRC循环冗余校验和FCS帧校验序列是单独的概念,CRC是一种错误校验方法,FCS是帧尾校验码,FCS可以采用CRC校验方法,也可以采用其他校验方法。 2.CRC算法原理 我们可以把任意的一串二进制数据表示为一个与之对应的多项式。比如: 二进制数据:1100101 多项式:$x^6 + x^5 + x^2+1$ 多项式: $x^6 + x^4+x^3 + x^2+1$ 二进制数据:1011101 有了这样的对应关系,对二进制数据的CRC校验就可以利用多项式运算规则进行校验计算。 CRC校验算法正是采用了模2除法,在数据处理里的具体表现为异或运算。 CRC的具体运算规则为:假设要传输的二进制数据为: 10010110 ,对应的m阶多项式为:$M =x^7+x^4+x^2+x^1$,除数为h阶的多项式为:$H=x^4+x$