CRC 【巡回冗長検査】 Cyclic Redundancy Check / 巡回冗長符号 / Cyclic Redundancy Code
概要
CRC(巡回冗長検査)とは、誤り検出方式の一つで、データを値とみなしてある定数で割った余り(余剰)を用いて誤りの検知を行なうもの。その検査用の値をCRC値、CRC符号、巡回冗長符号などと呼ぶが、値自体をCRC(Cyclic Redundancy Code)と呼ぶこともある。誤り検出符号はデータの伝送や記録、複製が正確に行われたかを調べる手法で、送信や記録の前に検査用の値を算出して元データに付加し、受信や読み出しの際に同じ箇所のデータについて同じ手順で値を算出する。
両者が一致すれば誤りが無いことが分かり、しなければ途中でデータの一部が欠落や変化していることが分かる。CRC符号は誤り検出用の符号であり、正しい値へ訂正する機能はない。
CRCでは調べる対象のデータを一定のビット数ごとに区切って2進数の値とみなし、それより短いビット数のある定数(生成多項式と呼ぶ)で割った余りを検査用の値とする。単純なチェックサムやパリティチェックなどの方式に比べ、一か所に連続して集中的に発生するバースト誤りの検知に強いという特徴がある。
CRCの算出方法には、データをどのくらい長さで区切り、どのような定数で割るかによって様々な種類がある。どのような方式が適しているかは状況によって異なるため、通信規格などで算出方法を個別に定めることが多い。
検査用の値がnビットになるCRCを「nビットCRC」あるいは「CRC-n」のように呼び、8ビットや16ビット、32ビットなどがよく用いられる。定数の長さはn+1ビットとなり、例えば8ビットCRCであれば9ビットの定数を用いる。同じ8ビットCRCでも定数が異なる複数の方式が存在する。
(2020.5.19更新)