CRC table

Note: in this table the high-order bit is omitted; see Specification of CRC above.

NamePolynomialRepresentations: normal / reversed / reverse of reciprocal
CRC-1x + 1 (most hardware; also known as parity bit)0x1 / 0x1 / 0x1
CRC-4-ITUx4 + x + 1 (ITU-T G.704, p. 12)0x3 / 0xC / 0x9
CRC-5-EPCx5 + x3 + 1 (Gen 2 RFID[14])0x09 / 0x12 / 0x14
CRC-5-ITUx5 + x4 + x2 + 1 (ITU-T G.704, p. 9)0x15 / 0x15 / 0x1A
CRC-5-USBx5 + x2 + 1 (USB token packets)0x05 / 0x14 / 0x12
CRC-6-ITUx6 + x + 1 (ITU-T G.704, p. 3)0x03 / 0x30 / 0x21
CRC-7x7 + x3 + 1 (telecom systems, ITU-T G.707, ITU-T G.832, MMC, SD)0x09 / 0x48 / 0x44
CRC-8-CCITTx8 + x2 + x + 1 (ATM HEC), ISDN Header Error Control and Cell Delineation ITU-T I.432.1 (02/99)0x07 / 0xE0 / 0x83
CRC-8-Dallas/Maximx8 + x5 + x4 + 1 (1-Wire bus)0x31 / 0x8C / 0x98
CRC-8x8 + x7 + x6 + x4 + x2 + 10xD5 / 0xAB / 0xEA[8]
CRC-8-SAE J1850x8 + x4 + x3 + x2 + 10x1D / 0xB8 / 0x8E
CRC-8-WCDMAx8 + x7 + x4 + x3 + x + 1[15]0x9B / 0xD9 / 0xCD[8]
CRC-10x10 + x9 + x5 + x4 + x + 1 (ATM; ITU-T I.610)0x233 / 0x331 / 0x319
CRC-11x11 + x9 + x8 + x7 + x2 + 1 (FlexRay[16])0x385 / 0x50E / 0x5C2
CRC-12x12 + x11 + x3 + x2 + x + 1 (telecom systems,[17][18] )0x80F / 0xF01 / 0xC07[8]
CRC-15-CANx15 + x14 + x10 + x8 + x7 + x4 + x3 + 10x4599 / 0x4CD1 / 0x62CC
CRC-16-IBMx16 + x15 + x2 + 1 (Bisync, Modbus, USB, ANSI X3.28, many others; also known as CRC-16 and CRC-16-ANSI)0x8005 / 0xA001 / 0xC002
CRC-16-CCITTx16 + x12 + x5 + 1 (X.25, HDLC, XMODEM, Bluetooth, SD, many others; known as CRC-CCITT)0x1021 / 0x8408 / 0x8810[8]
CRC-16-T10-DIFx16 + x15 + x11 + x9 + x8 + x7 + x5 + x4 + x2 + x + 1 (SCSI DIF)0x8BB7[19] / 0xEDD1 / 0xC5DB
CRC-16-DNPx16 + x13 + x12 + x11 + x10 + x8 + x6 + x5 + x2 + 1 (DNP, IEC 870, M-Bus)0x3D65 / 0xA6BC / 0x9EB2
CRC-16-DECTx16 + x10 + x8 + x7 + x3 + 1 (cordless telephones)[20]0x0589 / 0x91A0 / 0x82C4
CRC-16-FletcherNot a CRC; see Fletcher's checksumUsed in Adler-32 A & B CRCs
CRC-24x24 + x22 + x20 + x19 + x18 + x16 + x14 + x13 + x11 + x10 + x8 + x7 + x6 + x3 + x + 1 (FlexRay[16])0x5D6DCB / 0xD3B6BA / 0xAEB6E5
CRC-24-Radix-64x24 + x23 + x18 + x17 + x14 + x11 + x10 + x7 + x6 + x5 + x4 + x3 + x + 1 (OpenPGP)0x864CFB / 0xDF3261 / 0xC3267D
CRC-30x30 + x29 + x21 + x20 + x15 + x13 + x12 + x11 + x8 + x7 + x6 + x2 + x + 1 (CDMA)0x2030B9C7 / 0x38E74301 / 0x30185CE3
CRC-32-AdlerNot a CRC; see Adler-32See Adler-32
CRC-32-IEEE 802.3x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 (V.42, MPEG-2, PNG[21], POSIX cksum)0x04C11DB7 / 0xEDB88320 / 0x82608EDB[12]
CRC-32C (Castagnoli)x32 + x28 + x27 + x26 + x25 + x23 + x22 + x20 + x19 + x18 + x14 + x13 + x11 + x10 + x9 + x8 + x6 + 1 (iSCSI & SCTP, G.hn payload, SSE4.2)0x1EDC6F41 / 0x82F63B78 / 0x8F6E37A0[12]
CRC-32K (Koopman)x32 + x30 + x29 + x28 + x26 + x20 + x19 + x17 + x16 + x15 + x11 + x10 + x7 + x6 + x4 + x2 + x + 10x741B8CD7 / 0xEB31D82E / 0xBA0DC66B[12]
CRC-32Qx32 + x31 + x24 + x22 + x16 + x14 + x8 + x7 + x5 + x3 + x + 1 (aviation; AIXM[22])0x814141AB / 0xD5828281 / 0xC0A0A0D5
CRC-64-ISOx64 + x4 + x3 + x + 1 (HDLC — ISO 3309, Swiss-Prot/TrEMBL; considered weak for hashing[23])0x000000000000001B / 0xD800000000000000 / 0x800000000000000D
CRC-64-ECMA-182x64 + x62 + x57 + x55 + x54 + x53 + x52 + x47 + x46 + x45 + x40 + x39 + x38 + x37 + x35 + x33 + x32 + x31 + x29 + x27 + x24 + x23 + x22 + x21 + x19 + x17 + x13 + x12 + x10 + x9 + x7 + x4 + x + 1 (as described in ECMA-182 p. 51)0x42F0E1EBA9EA3693 / 0xC96C5795D7870F42 / 0xA17870F5D4F51B49

 

 

### CRC16 8005 查表实现 CRC16 8005 是一种常见的循环冗余校验算法,其多项式为 `0x8005`。为了提高计算效率,通常会预先构建一个查找表 (lookup table),该表存储了所有可能字节值对应的 CRC 值。 #### 构建 Lookup Table 根据 Sarwate 的方法,在 1988 年提出的使用查找表来加速 CRC 计算的方式[^3],可以通过预计算每个可能输入字节的结果并将其存储在一个数组中。以下是 Python 实现: ```python def create_crc16_table(): polynomial = 0x8005 crc_table = [] for i in range(256): crc = i << 8 for j in range(8): if crc & 0x8000: crc = (crc << 1) ^ polynomial else: crc <<= 1 crc &= 0xFFFF crc_table.append(crc) return crc_table ``` 此函数创建了一个长度为 256 的列表 `crc_table`,其中每一项代表当输入特定字节时所得到的 CRC 结果。 #### 使用 Lookup Table 进行 CRC16 8005 计算 有了上述表格之后,就可以利用它来进行高效的 CRC16 8005 计算了。下面是一个基于之前生成的查找表执行 CRC16 8005 校验的例子: ```python def calculate_crc16_8005(data, crc=0xFFFF, crc_table=None): if not crc_table: crc_table = create_crc16_table() for byte in data: t = ((crc >> 8) ^ byte) & 0xFF crc = (((crc << 8) & 0xFFFF) ^ crc_table[t]) & 0xFFFF return crc ``` 这段代码接收待检验的数据序列作为参数,并返回最终计算出来的 CRC16 8005 值。注意这里采用了与给定公式一致的操作方式更新 CRC 变量[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值