巡回冗長検査(じゅんかいじょうちょうけんさ、英: Cyclic Redundancy Check、
CRC)とは、任意長のデータ
ストリームを入力とし、例えば32
ビット整数などの固定サイズの値を出力する
関数の一種であり、連続する誤りを検出するための誤り検出符号の一種。
CRC という用語は、その
関数自体を指す場合とその出力値を指す場合がある。
CRCは、データの転送や格納時にその一部が偶然変化したことを検出する
チェックサムとして使うことができる。デジタル回路で簡単に
実装でき、数学的にも分析が容易で、伝送路ノイズによる誤りの検出によく使われている。
CRCは W. Wesley Peterson が発明し、1961年に論文として発表した
。
IEEE勧告の32
ビットCRCは1975年に登場し、
イーサネットなどの各種通信に使われている
。
この符号自体はデータが誤りであることを検出できるにすぎず、値から元のデータを復元できるわけではない。
CRCは、
などの特徴を持つことから、
ネットワークから
ハードウェア回路における転送に幅広く使われているだけにとどまらず、
ソフトウェアにおいてデータの検索のハッシュキーなどに使われることもある。
CRCの
ソースコードについては、
RFC1952に規定されている
GZIPフォーマットに含まれるcrc32.cにある。
ただ、
CRCは
ビット幅(通常、16bit若しくは32bit)、生成多項式(CCITTで推奨値が2つ例示されている)等が一意に定まっていないため、同じビット列を処理してもプログラムにより全く違う値を返すことがある。一般的ではないが、
ビット幅に関しては、12bitのものも存在する。また、ハッシュとして用いるには同値が頻出するため適当と言えず、現在では誤りの検出以外の目的で使用されることはまれである。