CRC RevEng

CRC RevEng

[ Home | Up | Summary | Legend | Disclaimer | Appendices ]

Catalogue of parametrised CRC algorithms

CRC-3/GSM

width=3 poly=0x3 init=0x0 refin=false refout=false xorout=0x7 check=0x4 residue=0x2 name="CRC-3/GSM"

CRC-3/ROHC

width=3 poly=0x3 init=0x7 refin=true refout=true xorout=0x0 check=0x6 residue=0x0 name="CRC-3/ROHC"

CRC-4/G-704

width=4 poly=0x3 init=0x0 refin=true refout=true xorout=0x0 check=0x7 residue=0x0 name="CRC-4/G-704"

CRC-4/INTERLAKEN

width=4 poly=0x3 init=0xf refin=false refout=false xorout=0xf check=0xb residue=0x2 name="CRC-4/INTERLAKEN"

CRC-5/EPC-C1G2

width=5 poly=0x09 init=0x09 refin=false refout=false xorout=0x00 check=0x00 residue=0x00 name="CRC-5/EPC-C1G2"

CRC-5/G-704

width=5 poly=0x15 init=0x00 refin=true refout=true xorout=0x00 check=0x07 residue=0x00 name="CRC-5/G-704"

CRC-5/USB

width=5 poly=0x05 init=0x1f refin=true refout=true xorout=0x1f check=0x19 residue=0x06 name="CRC-5/USB"

CRC-6/CDMA2000-A

width=6 poly=0x27 init=0x3f refin=false refout=false xorout=0x00 check=0x0d residue=0x00 name="CRC-6/CDMA2000-A"

CRC-6/CDMA2000-B

width=6 poly=0x07 init=0x3f refin=false refout=false xorout=0x00 check=0x3b residue=0x00 name="CRC-6/CDMA2000-B"

CRC-6/DARC

width=6 poly=0x19 init=0x00 refin=true refout=true xorout=0x00 check=0x26 residue=0x00 name="CRC-6/DARC"

CRC-6/G-704

width=6 poly=0x03 init=0x00 refin=true refout=true xorout=0x00 check=0x06 residue=0x00 name="CRC-6/G-704"

CRC-6/GSM

width=6 poly=0x2f init=0x00 refin=false refout=false xorout=0x3f check=0x13 residue=0x3a name="CRC-6/GSM"

CRC-7/MMC

width=7 poly=0x09 init=0x00 refin=false refout=false xorout=0x00 check=0x75 residue=0x00 name="CRC-7/MMC"

CRC-7/ROHC

width=7 poly=0x4f init=0x7f refin=true refout=true xorout=0x00 check=0x53 residue=0x00 name="CRC-7/ROHC"

CRC-7/UMTS

width=7 poly=0x45 init=0x00 refin=false refout=false xorout=0x00 check=0x61 residue=0x00 name="CRC-7/UMTS"

CRC-8/AUTOSAR

width=8 poly=0x2f init=0xff refin=false refout=false xorout=0xff check=0xdf residue=0x42 name="CRC-8/AUTOSAR"

CRC-8/BLUETOOTH

width=8 poly=0xa7 init=0x00 refin=true refout=true xorout=0x00 check=0x26 residue=0x00 name="CRC-8/BLUETOOTH"

CRC-8/CDMA2000

width=8 poly=0x9b init=0xff refin=false refout=false xorout=0x00 check=0xda residue=0x00 name="CRC-8/CDMA2000"

CRC-8/DARC

width=8 poly=0x39 init=0x00 refin=true refout=true xorout=0x00 check=0x15 residue=0x00 name="CRC-8/DARC"

CRC-8/DVB-S2

width=8 poly=0xd5 init=0x00 refin=false refout=false xorout=0x00 check=0xbc residue=0x00 name="CRC-8/DVB-S2"

CRC-8/GSM-A

width=8 poly=0x1d init=0x00 refin=false refout=false xorout=0x00 check=0x37 residue=0x00 name="CRC-8/GSM-A"

CRC-8/GSM-B

width=8 poly=0x49 init=0x00 refin=false refout=false xorout=0xff check=0x94 residue=0x53 name="CRC-8/GSM-B"

CRC-8/HITAG

width=8 poly=0x1d init=0xff refin=false refout=false xorout=0x00 check=0xb4 residue=0x00 name="CRC-8/HITAG"

CRC-8/I-432-1

width=8 poly=0x07 init=0x00 refin=false refout=false xorout=0x55 check=0xa1 residue=0xac name="CRC-8/I-432-1"

CRC-8/I-CODE

width=8 poly=0x1d init=0xfd refin=false refout=false xorout=0x00 check=0x7e residue=0x00 name="CRC-8/I-CODE"

CRC-8/LTE

width=8 poly=0x9b init=0x00 refin=false refout=false xorout=0x00 check=0xea residue=0x00 name="CRC-8/LTE"

CRC-8/MAXIM-DOW

width=8 poly=0x31 init=0x00 refin=true refout=true xorout=0x00 check=0xa1 residue=0x00 name="CRC-8/MAXIM-DOW"

CRC-8/MIFARE-MAD

width=8 poly=0x1d init=0xc7 refin=false refout=false xorout=0x00 check=0x99 residue=0x00 name="CRC-8/MIFARE-MAD"

CRC-8/NRSC-5

width=8 poly=0x31 init=0xff refin=false refout=false xorout=0x00 check=0xf7 residue=0x00 name="CRC-8/NRSC-5"

CRC-8/OPENSAFETY

width=8 poly=0x2f init=0x00 refin=false refout=false xorout=0x00 check=0x3e residue=0x00 name="CRC-8/OPENSAFETY"

CRC-8/ROHC

width=8 poly=0x07 init=0xff refin=true refout=true xorout=0x00 check=0xd0 residue=0x00 name="CRC-8/ROHC"

CRC-8/SAE-J1850

width=8 poly=0x1d init=0xff refin=false refout=false xorout=0xff check=0x4b residue=0xc4 name="CRC-8/SAE-J1850"

CRC-8/SMBUS

width=8 poly=0x07 init=0x00 refin=false refout=false xorout=0x00 check=0xf4 residue=0x00 name="CRC-8/SMBUS"

CRC-8/TECH-3250

width=8 poly=0x1d init=0xff refin=true refout=true xorout=0x00 check=0x97 residue=0x00 name="CRC-8/TECH-3250"

CRC-8/WCDMA

width=8 poly=0x9b init=0x00 refin=true refout=true xorout=0x00 check=0x25 residue=0x00 name="CRC-8/WCDMA"

CRC-10/ATM

width=10 poly=0x233 init=0x000 refin=false refout=false xorout=0x000 check=0x199 residue=0x000 name="CRC-10/ATM"

CRC-10/CDMA2000

width=10 poly=0x3d9 init=0x3ff refin=false refout=false xorout=0x000 check=0x233 residue=0x000 name="CRC-10/CDMA2000"

CRC-10/GSM

width=10 poly=0x175 init=0x000 refin=false refout=false xorout=0x3ff check=0x12a residue=0x0c6 name="CRC-10/GSM"

CRC-11/FLEXRAY

width=11 poly=0x385 init=0x01a refin=false refout=false xorout=0x000 check=0x5a3 residue=0x000 name="CRC-11/FLEXRAY"

CRC-11/UMTS

width=11 poly=0x307 init=0x000 refin=false refout=false xorout=0x000 check=0x061 residue=0x000 name="CRC-11/UMTS"

CRC-12/CDMA2000

width=12 poly=0xf13 init=0xfff refin=false refout=false xorout=0x000 check=0xd4d residue=0x000 name="CRC-12/CDMA2000"

CRC-12/DECT

width=12 poly=0x80f init=0x000 refin=false refout=false xorout=0x000 check=0xf5b residue=0x000 name="CRC-12/DECT"

CRC-12/GSM

width=12 poly=0xd31 init=0x000 refin=false refout=false xorout=0xfff check=0xb34 residue=0x178 name="CRC-12/GSM"

CRC-12/UMTS

width=12 poly=0x80f init=0x000 refin=false refout=true xorout=0x000 check=0xdaf residue=0x000 name="CRC-12/UMTS"

CRC-13/BBC

width=13 poly=0x1cf5 init=0x0000 refin=false refout=false xorout=0x0000 check=0x04fa residue=0x0000 name="CRC-13/BBC"

CRC-14/DARC

width=14 poly=0x0805 init=0x0000 refin=true refout=true xorout=0x0000 check=0x082d residue=0x0000 name="CRC-14/DARC"

CRC-14/GSM

width=14 poly=0x202d init=0x0000 refin=false refout=false xorout=0x3fff check=0x30ae residue=0x031e name="CRC-14/GSM"

CRC-15/CAN

width=15 poly=0x4599 init=0x0000 refin=false refout=false xorout=0x0000 check=0x059e residue=0x0000 name="CRC-15/CAN"

CRC-15/MPT1327

width=15 poly=0x6815 init=0x0000 refin=false refout=false xorout=0x0001 check=0x2566 residue=0x6815 name="CRC-15/MPT1327"

CRC-16/ARC

width=16 poly=0x8005 init=0x0000 refin=true refout=true xorout=0x0000 check=0xbb3d residue=0x0000 name="CRC-16/ARC"

CRC-16/CDMA2000

width=16 poly=0xc867 init=0xffff refin=false refout=false xorout=0x0000 check=0x4c06 residue=0x0000 name="CRC-16/CDMA2000"

CRC-16/CMS

width=16 poly=0x8005 init=0xffff refin=false refout=false xorout=0x0000 check=0xaee7 residue=0x0000 name="CRC-16/CMS"

CRC-16/DDS-110

width=16 poly=0x8005 init=0x800d refin=false refout=false xorout=0x0000 check=0x9ecf residue=0x0000 name="CRC-16/DDS-110"

CRC-16/DECT-R

width=16 poly=0x0589 init=0x0000 refin=false refout=false xorout=0x0001 check=0x007e residue=0x0589 name="CRC-16/DECT-R"

CRC-16/DECT-X

width=16 poly=0x0589 init=0x0000 refin=false refout=false xorout=0x0000 check=0x007f residue=0x0000 name="CRC-16/DECT-X"

CRC-16/DNP

width=16 poly=0x3d65 init=0x0000 refin=true refout=true xorout=0xffff check=0xea82 residue=0x66c5 name="CRC-16/DNP"

CRC-16/EN-13757

width=16 poly=0x3d65 init=0x0000 refin=false refout=false xorout=0xffff check=0xc2b7 residue=0xa366 name="CRC-16/EN-13757"

CRC-16/GENIBUS

width=16 poly=0x1021 init=0xffff refin=false refout=false xorout=0xffff check=0xd64e residue=0x1d0f name="CRC-16/GENIBUS"

CRC-16/GSM

width=16 poly=0x1021 init=0x0000 refin=false refout=false xorout=0xffff check=0xce3c residue=0x1d0f name="CRC-16/GSM"

CRC-16/IBM-3740

width=16 poly=0x1021 init=0xffff refin=false refout=false xorout=0x0000 check=0x29b1 residue=0x0000 name="CRC-16/IBM-3740"

CRC-16/IBM-SDLC

width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0xffff check=0x906e residue=0xf0b8 name="CRC-16/IBM-SDLC"

CRC-16/ISO-IEC-14443-3-A

width=16 poly=0x1021 init=0xc6c6 refin=true refout=true xorout=0x0000 check=0xbf05 residue=0x0000 name="CRC-16/ISO-IEC-14443-3-A"

CRC-16/KERMIT

width=16 poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 check=0x2189 residue=0x0000 name="CRC-16/KERMIT"

CRC-16/LJ1200

width=16 poly=0x6f63 init=0x0000 refin=false refout=false xorout=0x0000 check=0xbdf4 residue=0x0000 name="CRC-16/LJ1200"

CRC-16/M17

width=16 poly=0x5935 init=0xffff refin=false refout=false xorout=0x0000 check=0x772b residue=0x0000 name="CRC-16/M17"

CRC-16/MAXIM-DOW

width=16 poly=0x8005 init=0x0000 refin=true refout=true xorout=0xffff check=0x44c2 residue=0xb001 name="CRC-16/MAXIM-DOW"

CRC-16/MCRF4XX

width=16 poly=0x1021 init=0xffff refin=true refout=true xorout=0x0000 check=0x6f91 residue=0x0000 name="CRC-16/MCRF4XX"

CRC-16/MODBUS

width=16 poly=0x8005 init=0xffff refin=true refout=true xorout=0x0000 check=0x4b37 residue=0x0000 name="CRC-16/MODBUS"

CRC-16/NRSC-5

width=16 poly=0x080b init=0xffff refin=true refout=true xorout=0x0000 check=0xa066 residue=0x0000 name="CRC-16/NRSC-5"

CRC-16/OPENSAFETY-A

width=16 poly=0x5935 init=0x0000 refin=false refout=false xorout=0x0000 check=0x5d38 residue=0x0000 name="CRC-16/OPENSAFETY-A"

CRC-16/OPENSAFETY-B

width=16 poly=0x755b init=0x0000 refin=false refout=false xorout=0x0000 check=0x20fe residue=0x0000 name="CRC-16/OPENSAFETY-B"

CRC-16/PROFIBUS

width=16 poly=0x1dcf init=0xffff refin=false refout=false xorout=0xffff check=0xa819 residue=0xe394 name="CRC-16/PROFIBUS"

CRC-16/RIELLO

width=16 poly=0x1021 init=0xb2aa refin=true refout=true xorout=0x0000 check=0x63d0 residue=0x0000 name="CRC-16/RIELLO"

CRC-16/SPI-FUJITSU

width=16 poly=0x1021 init=0x1d0f refin=false refout=false xorout=0x0000 check=0xe5cc residue=0x0000 name="CRC-16/SPI-FUJITSU"

CRC-16/T10-DIF

width=16 poly=0x8bb7 init=0x0000 refin=false refout=false xorout=0x0000 check=0xd0db residue=0x0000 name="CRC-16/T10-DIF"

CRC-16/TELEDISK

width=16 poly=0xa097 init=0x0000 refin=false refout=false xorout=0x0000 check=0x0fb3 residue=0x0000 name="CRC-16/TELEDISK"

CRC-16/TMS37157

width=16 poly=0x1021 init=0x89ec refin=true refout=true xorout=0x0000 check=0x26b1 residue=0x0000 name="CRC-16/TMS37157"

CRC-16/UMTS

width=16 poly=0x8005 init=0x0000 refin=false refout=false xorout=0x0000 check=0xfee8 residue=0x0000 name="CRC-16/UMTS"

CRC-16/USB

width=16 poly=0x8005 init=0xffff refin=true refout=true xorout=0xffff check=0xb4c8 residue=0xb001 name="CRC-16/USB"

CRC-16/XMODEM

width=16 poly=0x1021 init=0x0000 refin=false refout=false xorout=0x0000 check=0x31c3 residue=0x0000 name="CRC-16/XMODEM"

CRC-17/CAN-FD

width=17 poly=0x1685b init=0x00000 refin=false refout=false xorout=0x00000 check=0x04f03 residue=0x00000 name="CRC-17/CAN-FD"

CRC-21/CAN-FD

width=21 poly=0x102899 init=0x000000 refin=false refout=false xorout=0x000000 check=0x0ed841 residue=0x000000 name="CRC-21/CAN-FD"

CRC-24/BLE

width=24 poly=0x00065b init=0x555555 refin=true refout=true xorout=0x000000 check=0xc25a56 residue=0x000000 name="CRC-24/BLE"

CRC-24/FLEXRAY-A

width=24 poly=0x5d6dcb init=0xfedcba refin=false refout=false xorout=0x000000 check=0x7979bd residue=0x000000 name="CRC-24/FLEXRAY-A"

CRC-24/FLEXRAY-B

width=24 poly=0x5d6dcb init=0xabcdef refin=false refout=false xorout=0x000000 check=0x1f23b8 residue=0x000000 name="CRC-24/FLEXRAY-B"

CRC-24/INTERLAKEN

width=24 poly=0x328b63 init=0xffffff refin=false refout=false xorout=0xffffff check=0xb4f3e6 residue=0x144e63 name="CRC-24/INTERLAKEN"

CRC-24/LTE-A

width=24 poly=0x864cfb init=0x000000 refin=false refout=false xorout=0x000000 check=0xcde703 residue=0x000000 name="CRC-24/LTE-A"

CRC-24/LTE-B

width=24 poly=0x800063 init=0x000000 refin=false refout=false xorout=0x000000 check=0x23ef52 residue=0x000000 name="CRC-24/LTE-B"

CRC-24/OPENPGP

width=24 poly=0x864cfb init=0xb704ce refin=false refout=false xorout=0x000000 check=0x21cf02 residue=0x000000 name="CRC-24/OPENPGP"

CRC-24/OS-9

width=24 poly=0x800063 init=0xffffff refin=false refout=false xorout=0xffffff check=0x200fa5 residue=0x800fe3 name="CRC-24/OS-9"

CRC-30/CDMA

width=30 poly=0x2030b9c7 init=0x3fffffff refin=false refout=false xorout=0x3fffffff check=0x04c34abf residue=0x34efa55a name="CRC-30/CDMA"

CRC-31/PHILIPS

width=31 poly=0x04c11db7 init=0x7fffffff refin=false refout=false xorout=0x7fffffff check=0x0ce9e46c residue=0x4eaf26f1 name="CRC-31/PHILIPS"

CRC-32/AIXM

width=32 poly=0x814141ab init=0x00000000 refin=false refout=false xorout=0x00000000 check=0x3010bf7f residue=0x00000000 name="CRC-32/AIXM"

CRC-32/AUTOSAR

width=32 poly=0xf4acfb13 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0x1697d06a residue=0x904cddbf name="CRC-32/AUTOSAR"

CRC-32/BASE91-D

width=32 poly=0xa833982b init=0xffffffff refin=true refout=true xorout=0xffffffff check=0x87315576 residue=0x45270551 name="CRC-32/BASE91-D"

CRC-32/BZIP2

width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0xffffffff check=0xfc891918 residue=0xc704dd7b name="CRC-32/BZIP2"

CRC-32/CD-ROM-EDC

width=32 poly=0x8001801b init=0x00000000 refin=true refout=true xorout=0x00000000 check=0x6ec2edc4 residue=0x00000000 name="CRC-32/CD-ROM-EDC"

CRC-32/CKSUM

width=32 poly=0x04c11db7 init=0x00000000 refin=false refout=false xorout=0xffffffff check=0x765e7680 residue=0xc704dd7b name="CRC-32/CKSUM"

CRC-32/ISCSI

width=32 poly=0x1edc6f41 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xe3069283 residue=0xb798b438 name="CRC-32/ISCSI"

CRC-32/ISO-HDLC

width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xcbf43926 residue=0xdebb20e3 name="CRC-32/ISO-HDLC"

CRC-32/JAMCRC

width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0x00000000 check=0x340bc6d9 residue=0x00000000 name="CRC-32/JAMCRC"

CRC-32/MEF

width=32 poly=0x741b8cd7 init=0xffffffff refin=true refout=true xorout=0x00000000 check=0xd2c22f51 residue=0x00000000 name="CRC-32/MEF"

CRC-32/MPEG-2

width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0x00000000 check=0x0376e6e7 residue=0x00000000 name="CRC-32/MPEG-2"

CRC-32/XFER

width=32 poly=0x000000af init=0x00000000 refin=false refout=false xorout=0x00000000 check=0xbd0be338 residue=0x00000000 name="CRC-32/XFER"

CRC-40/GSM

width=40 poly=0x0004820009 init=0x0000000000 refin=false refout=false xorout=0xffffffffff check=0xd4164fc646 residue=0xc4ff8071ff name="CRC-40/GSM"

CRC-64/ECMA-182

width=64 poly=0x42f0e1eba9ea3693 init=0x0000000000000000 refin=false refout=false xorout=0x0000000000000000 check=0x6c40df5f0b497347 residue=0x0000000000000000 name="CRC-64/ECMA-182"

CRC-64/GO-ISO

width=64 poly=0x000000000000001b init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0xb90956c775a41001 residue=0x5300000000000000 name="CRC-64/GO-ISO"

CRC-64/MS

width=64 poly=0x259c84cba6426349 init=0xffffffffffffffff refin=true refout=true xorout=0x0000000000000000 check=0x75d4b74f024eceea residue=0x0000000000000000 name="CRC-64/MS"

CRC-64/NVME

width=64 poly=0xad93d23594c93659 init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0xae8b14860a799888 residue=0xf310303b2b6f6e42 name="CRC-64/NVME"

CRC-64/REDIS

width=64 poly=0xad93d23594c935a9 init=0x0000000000000000 refin=true refout=true xorout=0x0000000000000000 check=0xe9c6d914c4b8d9ca residue=0x0000000000000000 name="CRC-64/REDIS"

CRC-64/WE

width=64 poly=0x42f0e1eba9ea3693 init=0xffffffffffffffff refin=false refout=false xorout=0xffffffffffffffff check=0x62ec59e3f1a4f00a residue=0xfcacbebd5931a992 name="CRC-64/WE"

CRC-64/XZ

width=64 poly=0x42f0e1eba9ea3693 init=0xffffffffffffffff refin=true refout=true xorout=0xffffffffffffffff check=0x995dc9bbdf1939fa residue=0x49958c9abd7d353f name="CRC-64/XZ"

CRC-82/DARC

width=82 poly=0x0308c0111011401440411 init=0x000000000000000000000 refin=true refout=true xorout=0x000000000000000000000 check=0x09ea83f625023801fd612 residue=0x000000000000000000000 name="CRC-82/DARC"

Summary

Summary of the CRC catalogue
CRC width (bits) Records
Attested Confirmed Academic Third-party Total
322
422
51113
6235
733
8127120
10123
11112
1244
1311
14112
15112
162341331
1711
2111
24538
3011
3111
3283112
4011
643227
8211
Total6011384113

Legend

Evidence classes

I
Primary documents. Evidence from a standards document (official or de facto) defining a protocol that uses the CRC algorithm.
II
Implementations. A widely-available implementation that can calculate CRCs for any desired message.
III
Secondary documents. Evidence from documents other than standards documents.
IV
Codewords. Valid message-CRC pairs from any source. Trivial codewords are simple sums of the algorithm parameters and/or simple multiples of the generator polynomial, and show insufficient calculation complexity to validate an algorithm. These are collected in the Catalogue only for illustration.

Model classes

Attested
The algorithm is evidenced by its definition in a primary document, plus one or more of the following:
Confirmed
The algorithm is evidenced by a widely-available implementation that can calculate CRCs for any desired message.
Academic
It has not been confirmed that CRCs are actually calculated in the field according to this record.
Third-party
All parameters and codewords originate from unofficial sources.

Model parameters

width
The number of bit cells in the linear feedback shift register; the degree of the generator polynomial, less one.
poly
The generator polynomial that sets the feedback tap positions of the shift register. poly is written in the hexadecimal, direct notation found in MSB-first code. The least significant bit corresponds to the inward end of the shift register, and is always set. The highest-order term is omitted.
init
The settings of the bit cells at the start of each calculation, before reading the first message bit. init is written in the hexadecimal, direct notation found in MSB-first code. The least significant bit corresponds to the inward end of the shift register.
refin
If equal to false, specifies that the characters of the message are read bit-by-bit, most significant bit (MSB) first; if equal to true, the characters are read bit-by-bit, least significant bit (LSB) first. Each sampled message bit is then XORed with the bit being simultaneously shifted out of the register at the most significant end, and the result is passed to the feedback taps.
refout
If equal to false, specifies that the contents of the register after reading the last message bit are unreflected before presentation; if equal to true, it specifies that they are reflected, character-by-character, before presentation. For the purpose of this definition, the reflection is performed by swapping the content of each cell with that of the cell an equal distance from the opposite end of the register; the characters of the CRC are then true images of parts of the reflected register, the character containing the original MSB always appearing first.
xorout
The XOR value applied to the contents of the register after the last message bit has been read and after the optional reflection. xorout is written in hexadecimal notation, having the same endianness as the CRC such that its true image appears in the characters of the CRC.
check
The contents of the register after initialising, reading the UTF-8 string "123456789" (as 8-bit characters), optionally reflecting, and applying the final XOR.
residue
The contents of the register after initialising, reading an error-free codeword and optionally reflecting the register (if refout=true), but not applying the final XOR. This is mathematically equivalent to initialising the register with the xorout parameter, reflecting it as described (if refout=true), reading as many zero bits as there are cells in the register, and reflecting the result (if refin=true). The residue of a crossed-endian model is calculated assuming that the characters of the received CRC are specially reflected before submitting the codeword.
name
The name assigned to the model in this Catalogue.

Model notes

Unique effective solution of codeword set
This model is the only one at the specified width that solves all the codewords listed in the model entry. Equivalent forms of the model may exist (differing in Init, XorOut and Residue values) but they produce identical CRCs at all message lengths. (If (x + 1)n appears in the factorisation of G(x), then there shall be 2n − 1 equivalent forms.)

References

Robert Bosch GmbH (September 1991), CAN 2.0 Specification.

Dipl. Inf. Johann N. Löfflmann (30 July 2006), Jacksum. CRC and hash calculator in Java.

Thomas Pircher (5 November 2022), pycrc. Python based parametrised CRC calculator and C code generator.

William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling (1992), Numerical recipes in C: The art of scientific computing. 2nd ed. Cambridge: Cambridge University Press. ISBN 0-521-43108-5

Dr Ross N. Williams (19 August 1993), "A Painless Guide to CRC Error Detection Algorithms" (courtesy of the Internet Archive).

Useful links

Lammert Bies (August 2011), "On-line CRC calculation and free library".

Lammert Bies, "Error detection and correction" Web forum (courtesy of the Internet Archive).

Jonathan Graham Harston (21–23 June 2011), "Source Code for Calculating CRCs".

PicList MassMind, "Cyclic Redundancy Check error detection".

Tom Torfs, IOCCC winning entry, 1998, CRC generator.

Disclaimer

Every effort has been made to ensure accuracy, however there may be occasional errors or omissions. All trademarks and registered trademarks are the intellectual property of their respective owners. The code and documentation included in this document are supplied without warranty, not even the implied warranties of merchantability or fitness for a particular purpose. In no event shall the author or his suppliers be liable for any loss, damage, injury or death, of any nature and howsoever caused, arising from the use of, or failure, inability or unwillingness to use, this software or documentation.

[ Top of page ]


Appendix A

Map of common 16-bit CRC algorithms.

Karnaugh map of the most common 16-bit CRCs, with Check values and algorithm citations. All values are hexadecimal.
"123456789"
(UTF-8)
Polynomial 1021 8005
Reflected? False True False
Initial value Final XOR
0000 0000 31C3
(XMODEM)
2189
(KERMIT)
BB3D
(ARC)
FEE8
(UMTS)
FFFF CE3C
(GSM)
DE76
(–)
44C2
(MAXIM)
0117
(–)
FFFF D64E
(GENIBUS)
906E
(SDLC)
B4C8
(USB)
5118
(–)
0000 29B1
(IBM 3740)
6F91
(MCRF4XX)
4B37
(MODBUS)
AEE7
(CMS)

Appendix B

Cross-reference of generator polynomials to Professor Koopman's CRC Polynomial Zoo.

Generator polynomials appearing in the CRC Catalogue
Width Polynomial Zoo names Models
Direct Reflected Koopman
30x30x60x5(*p) CRC-3K; RFC 3095; FP-3CRC-3/GSM, CRC-3/ROHC
40x30xc0x9(*p) CCITT-4; FP-4; ITU-T G.704CRC-4/G-704, CRC-4/INTERLAKEN
50x050x140x12(*p) CRC-5-EPC; CRC-5-USB; FP-5CRC-5/USB
50x090x12*< 0x14(*p) CRC-5-EPC; CRC-5-USB; FP-5CRC-5/EPC-C1G2
50x150x15*< 0x1a(*op) CRC-5; CRC-5-ITU; CRC-5F/4; FOP-5 ("65")CRC-5/G-704
60x030x300x21(*p) CRC-6; CRC-6-ITU; FP-6CRC-6/G-704
60x070x380x23(*op) CRC-6-CDMA2000-B; FOP-6CRC-6/CDMA2000-B
60x190x26< 0x2c(*op) DARC-6CRC-6/DARC
60x270x390x33(*p) CRC-6-CDMA2000-A; CRC-6F/3 ("147p")CRC-6/CDMA2000-A
60x2f0x3d0x37(*op) CRC-6-GSM; CRC-6F/4 ("157")CRC-6/GSM
70x090x480x44(*p) CRC-7CRC-7/MMC
70x450x51< 0x62(*op) CRC-7PCRC-7/UMTS
70x4f0x790x67(*o) RFC 3095CRC-7/ROHC
80x070xe00x83(*op) FOP-8; ATM-8; CRC-8PCRC-8/I-432-1, CRC-8/ROHC, CRC-8/SMBUS
80x310x8c< 0x98(*op) DOWCRCCRC-8/MAXIM-DOW, CRC-8/NRSC-5
80x1d0xb80x8e(*p) SAE J-1850; FP-8CRC-8/GSM-A, CRC-8/HITAG, CRC-8/I-CODE, CRC-8/MIFARE-MAD, CRC-8/SAE-J1850, CRC-8/TECH-3250
80x490x92< 0xa4(*o) CRC-8-GSM-BCRC-8/GSM-B
80x2f0xf40x97(*op) C2; CRC-8-AUTOSAR; CRC-8F/4.2 ("457")CRC-8/AUTOSAR, CRC-8/OPENSAFETY
80x390x9c= 0x9cDARC-8CRC-8/DARC
80xd50xab< 0xea(*o) CRC-8CRC-8/DVB-S2
80x9b0xd90xcd(*op) WCDMA-8CRC-8/CDMA2000, CRC-8/LTE, CRC-8/WCDMA
80xa70xe50xd3(*op) CRC-8-BluetoothCRC-8/BLUETOOTH
100x3d90x26f< 0x3ec(*op) CRC-10-CMDA2000CRC-10/CDMA2000
100x1750x2ba= 0x2baCRC-10-GSMCRC-10/GSM
100x2330x3310x319(*op) CRC-10CRC-10/ATM
110x3850x50e< 0x5c2(*o) FlexRay-11CRC-11/FLEXRAY
110x3070x7060x583(*op) CRC-11F/4.2 "7015"CRC-11/UMTS
120xd310x8cb< 0xe98CRC-12-GSMCRC-12/GSM
120x80f0xf010xc07(*op) CRC-12CRC-12/DECT, CRC-12/UMTS
120xf130xc8f< 0xf89(*op) CRC-12-CMDA2000CRC-12/CDMA2000
130x1cf50x15e7< 0x1e7a(*o) CRC-13-BBCCRC-13/BBC
140x08050x28040x2402(*op) DARC-14 (*op)CRC-14/DARC
140x202d0x2d01< 0x3016(*op) CRC-14-GSMCRC-14/GSM
150x45990x4cd1< 0x62cc(*o) CANCRC-15/CAN
150x68150x540b< 0x740aCRC-15-MPT1327CRC-15/MPT1327
160x05890x91a00x82c4(*o) CRC-16-DECTCRC-16/DECT-R, CRC-16/DECT-X
160x080b0xd0100x8405CRC-16/NRSC-5
160x10210x8408< 0x8810(*op) CCITT-16CRC-16/GENIBUS, CRC-16/GSM, CRC-16/IBM-3740, CRC-16/IBM-SDLC, CRC-16/ISO-IEC-14443-3-A, CRC-16/KERMIT, CRC-16/MCRF4XX, CRC-16/RIELLO, CRC-16/SPI-FUJITSU, CRC-16/TMS37157, CRC-16/XMODEM
160x1dcf0xf3b80x8ee7ProfiBusCRC-16/PROFIBUS
160x3d650xa6bc0x9eb2(*o) C1; CRC-16-DNP; CRC-16F/6.2 ("236545")CRC-16/DNP, CRC-16/EN-13757
160x80050xa001*< 0xc002(*op) CRC-16; CRC-16-IBMCRC-16/ARC, CRC-16/CMS, CRC-16/DDS-110, CRC-16/MAXIM-DOW, CRC-16/MODBUS, CRC-16/UMTS, CRC-16/USB
160x59350xac9a= 0xac9aC3; CRC-16F/5 ("254465s")CRC-16/M17, CRC-16/OPENSAFETY-A
160x6f630xc6f60xb7b1IEEE WG77.1CRC-16/LJ1200
160x755b0xdaae0xbaadCRC-16K/4CRC-16/OPENSAFETY-B
160x8bb70xedd10xc5db(*p) CRC-16-T10-DIFCRC-16/T10-DIF
160xa0970xe9050xd04b(*o) IBM-16CRC-16/TELEDISK
160xc8670xe6130xe433(*p) CRC-16-CMDA2000CRC-16/CDMA2000
170x1685b0x1b42d= 0x1b42d(*o) CRC-17-CANCRC-17/CAN-FD
210x1028990x132281< 0x18144c(*o) CRC-21-CANCRC-21/CAN-FD
240x00065b0xda60000x80032d(*op) BLE-24 (Bluetooth Low Energy)CRC-24/BLE
240x328b630xc6d14c0x9945b1(*op) CRC-24/4CRC-24/INTERLAKEN
240x5d6dcb0xd3b6ba0xaeb6e5(*o) CRC-24; CRC-24/6.1; FlexRay-24CRC-24/FLEXRAY-A, CRC-24/FLEXRAY-B
240x8000630xc600010xc00031(*op) WCDMA-24CRC-24/LTE-B, CRC-24/OS-9
240x864cfb0xdf32610xc3267d(*op) CRC-24-Radix-64CRC-24/LTE-A, CRC-24/OPENPGP
300x2030b9c70x38e743010x30185ce3(*op) CRC-30CRC-30/CDMA
310x04c11db70x76dc41900x42608edbCRC-31/PHILIPS
320x000000af0xf50000000x80000057(*p) FP-32, CRC-32K/3CRC-32/XFER
320x04c11db70xedb883200x82608edb(*p) IEEE 802.3; CRC-32CRC-32/BZIP2, CRC-32/CKSUM, CRC-32/ISO-HDLC, CRC-32/JAMCRC, CRC-32/MPEG-2
320x1edc6f410x82f63b78< 0x8f6e37a0(*op) iSCSI; CRC-32C; CRC-32/4CRC-32/ISCSI
320x741b8cd70xeb31d82e0xba0dc66b(*o) CRC-32K/6.1CRC-32/MEF
320x8001801b0xd80180010xc000c00dCRC-32/CD-ROM-EDC
320x814141ab0xd58282810xc0a0a0d5(*op) CRC-32QCRC-32/AIXM
320xf4acfb130xc8df352f< 0xfa567d89(*o) CRC-32/6 correctedCRC-32/AUTOSAR
320xa833982b0xd419cc15= 0xd419cc15CRC-32/5.1CRC-32/BASE91-D
400x00048200090x90004120000x8002410004CRC-40/GSM
640x000000000000001b0xd8000000000000000x800000000000000d(*p) FP-64, CRC-64-ISOCRC-64/GO-ISO
640x259c84cba64263490x92c64265d32139a4< 0x92ce4265d32131a4CRC-64/MS
640xad93d23594c935a90x95ac9329ac4bc9b5< 0xd6c9e91aca649ad4(*p) JonesCRC-64/REDIS
640xad93d23594c936590x9a6c9329ac4bc9b5< 0xd6c9e91aca649b2cCRC-64/NVME
640x42f0e1eba9ea36930xc96c5795d7870f420xa17870f5d4f51b49(*o) CRC-64-ECMACRC-64/ECMA-182, CRC-64/WE, CRC-64/XZ
820x0308c01110114014404110x220808a00a2022200c4300x218460088808a00a20208CRC-82/DARC

Legend: < Lexically greater than its reciprocal in the Reflected column. *< Lexically greater than its reciprocal listed in the Zoo and in the Reflected column. = Palindromic polynomial. (*o) Multiple of (x + 1). (*p) Primitive polynomial. (*op) Product of a primitive polynomial and (x + 1).


Greg Cook, [email address]
https://reveng.sourceforge.io/crc-catalogue/all.htm Last updated 11 December 2024
Links last verified 20 July 2023

Valid HTML 4.01 Strict. Hosting by SourceForge.net

[ Top of page ]