CRC校验码(C#实现)

CRC校验码是一种广泛应用于数据通信领域的错误检测技术。它通过使用17位生成多项式G(x) = x16 + x12 + x5 + 1来计算16位的校验码,确保数据传输的正确性和完整性。本文介绍了CRC校验的基本概念,并探讨了如何在C#中实现这一校验过程。
摘要由CSDN通过智能技术生成

CRC校验(循环冗余校验)小知识
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

适用规则:
CRC-CCITT是一个17位生成多项式G=[1 0001 0000 0010 0001],用多项式形式表示为G(x)=x16+x12+x5+1,由它产生的检验码R的二进制位数是16位(2字节)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace MeterReading.API.App_Code
{
   
    public class CRC16CCITT
    {
   
        private static readonly List<int> calcValus = new List<int>
        {
   
           0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
           0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
           0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x
1、循环校验(CRC):是数据通信领域中最常用的一种差错校验,其特征是信息字段和校验字段的长度可以任意选定。   2、生成CRC的基本原理:任意一个由二进制位串组成的代都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代101111。   3、CRC集选择的原则:若设字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC集中的任一字,存在且仅存在一个R次多项式g(x),使得   V(x)=A(x)g(x)=xRm(x)+r(x);   其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式,   g(x)称为生成多项式:   g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR   发送方通过指定的g(x)产生CRC字,接收方则通过该g(x)来验证收到的CRC字。   4、CRC校验软件生成方法:   借助于多项式除法,其余数为校验字段。   例如:信息字段代为: 1011001;对应m(x)=x6+x4+x3+1   假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代为: 11001   x4m(x)=x10+x8+x7+x4 对应的代记为:10110010000;   采用多项式除法: 得余数为: 1010 (即校验字段为:1010)   发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10   信息字段 校验字段   接收方:使用相同的生成进行校验:接收到的字段/生成(二进制除法)   如果能够除尽,则正确,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值