巡回冗長符号。誤り検出のための符号。
データを特定の定数で割り算し、その剰余を検査用の数値として用いる。単純なチェックサムで誤り検出を行なうよりも確実性があるため、厳密性を必要とする場面でよく使われる。
大きく、データの幅(ビット数)と多項式によって分類される。
用途に応じて、様々ある。一般的なものに、次のようなものがある。
このうち、17ビットの定数を用いて16ビットのCRCを求めるCRC-CCITT、CRC-16と、33ビットの定数を用いて32ビットのCRCを求めるCRC-32がよく使われる。この定数は多項式と呼ばれる。
多項式は様々な誤りに対し正常時と異なる値を算出できるものが求められ、次のような値が主に利用されている。
大雑把な計算方法は、次のとおり。16ビットCRCを、アセンブラで処理すると仮定し、16ビットのCRCを計算するとする。メモリから1バイト(8ビットとする)を随時読み計算する方法を述べる。
CやC++で計算しやすいように、CRC格納レジスタが32ビットと仮定し、このレジスタ一つで全ての演算をする例を紹介する。それ以外の条件は上と同じ。
CRC格納レジスタの構成は、[8ビット桁溢れ分][16ビットCRC][8ビットのデータ]、となっている。