パリティチェックは、データ通信や記憶装置で使われてきた代表的なエラー検出方式の一つです。本記事では、パリティチェックの基本概念から仕組み、実装の考え方、限界と適用しやすい場面までをまとめます。あわせて、より高い信頼性が求められる場面で併用されやすい方式(CRCやECCなど)との関係にも触れます。
パリティチェックとは、データ中の「1」の個数(ビットの偶奇)を利用して誤りを検出する方式です。データに1ビット(パリティビット)を付加し、受信側(読み出し側)でも同じ規則で偶奇を確認します。規則に矛盾があれば「何らかのビット誤りが起きた可能性が高い」と判断できます。
注意点として、パリティチェックは改ざん検知(セキュリティ目的)の仕組みではありません。攻撃者が意図的にビットを変えた場合でも、パリティビットまで整合するように書き換えれば検出できないためです。パリティチェックが担うのは、あくまで伝送・記憶過程で偶発的に起きるビット誤りの検出です。
パリティチェックには、奇数パリティと偶数パリティがあります。
どちらを選んでも、検出能力そのものは同じです。設計・規格で決まっている場合はそれに従い、そうでなければ運用上の統一方針として決めます。
パリティビットは次の手順で付加します。
受信(読み出し)側では、受け取ったデータ+パリティビットについて同じ規則で偶奇を計算し、矛盾があればエラーとします。
パリティチェックは「シンプルで実装コストを抑えやすい」という性質から、主に次のような場面で使われてきました。
| 適用例 | 説明 |
|---|---|
| シリアル通信 | RS-232Cなどで、文字(フレーム)単位にパリティビットを付加して誤りを検出する設定が使われます。 |
| メモリ(パリティメモリ) | データとパリティビットを一緒に保持し、読み出し時に矛盾がないかを確認します(一般的には検出のみで、訂正はしません)。 |
| 内部バス/周辺回路 | ハードウェア内の単純な誤り検出として、パリティが採用されることがあります。 |
| ネットワーク(補足) | 現代の代表例であるEthernetのフレーム誤り検出は主にFCS(CRC)です。パリティが中心になるケースは一般的ではありません。 |
パリティチェックは有用ですが、検出能力に明確な限界があるため、より高い信頼性が求められる場面ではCRCやECC(例:SECDEDなど)といった方式が採用されます。
パリティビットは「1の個数が偶数か奇数か」を表す1ビットです。実装上は、ビット列のXOR(排他的論理和)で偶奇を求めるのが定番です。たとえば、すべてのデータビットをXORして得られる値は「1の個数が奇数なら1、偶数なら0」になります(定義の表現は実装や仕様により変わるため、最終的には奇数/偶数パリティの規則に合わせて決めます)。
パリティチェックが検出できるのは、ビット誤りの個数が「奇数」のときです。1ビットが反転すると偶奇が必ず変わるため、1ビット誤りは確実に検出できます。
一方で、2ビット・4ビットなど偶数個のビットが同時に反転すると、偶奇が元のままになり得ます。そのためパリティチェックは、誤りが起きていても「矛盾なし」と判定して見逃す可能性があります。
パリティチェックの限界は次のとおりです。
このため、設計では「どの程度の誤り率・どの程度の信頼性が必要か」を基準に、CRCやECC(ハミング符号、SECDEDなど)を使うか、あるいは上位層の再送制御(ARQ)と組み合わせるかを判断します。
実装の流れはシンプルです。
実装上のポイントは「ビット長」「パリティビットの配置」「奇数/偶数パリティの統一」「エラー時の扱い(破棄・再送・ログ・アラート)」を仕様として明確にすることです。
パリティ計算は「ビットを1つずつ見てXORする」か、「ビットカウント(popcount)して偶奇を見る」かのどちらかが基本です。多くの言語・CPUにはビットカウント命令や組み込み関数があるため、性能要件が厳しい場合はそれらの利用も検討します。
パリティチェックは、軽量に実装できる誤り検出として、通信・記憶・内部バスなどの分野で利用されてきました。現在も「簡単に異常を検知したい」場面では選択肢になりますが、信頼性要求が高い領域では、より検出能力の高い方式が主流です。
| 手法 | 特徴 | 検出・訂正能力(代表的な性質) |
|---|---|---|
| パリティチェック | 非常に軽量で実装が容易 | 奇数個のビット誤りを検出(1ビット誤りは確実に検出) |
| チェックサム | 実装容易。用途により強弱がある | 多くの誤りを検出できるが、検出漏れの性質は方式次第 |
| CRC(巡回冗長検査) | 通信で広く使われる。検出能力が高い | 多くの誤りパターンを高確率で検出(多項式・ビット長に依存) |
| ECC(例:ハミング符号、SECDEDなど) | メモリ等で利用。訂正も視野に入る | 方式により1ビット訂正、2ビット検出などが可能 |
パリティチェックは「軽いが検出能力は限定的」、CRCやECCは「検出能力が高いが、冗長ビットや計算コストが増える」という関係で捉えると判断しやすくなります。
パリティの考え方を拡張したものとして、2次元パリティ(行と列の両方にパリティを付ける)があります。たとえば、行パリティと列パリティを併用すると、1ビット誤りであれば誤り位置を特定できるケースがあります。
ただし、現代の実システムでは、汎用の誤り検出としてはCRC、訂正を含めるならECCといった実績ある方式が採用されることが多く、パリティを拡張して対応するより、目的に合った方式を選ぶほうが自然です。
パリティチェックは基本概念が確立しており、近年の技術動向としては「パリティが主流方式を置き換える」といった話題は多くありません。最新動向として触れる場合は、誤り制御全体(高速化、低電力化、ハードウェア支援、通信方式に応じた符号化など)の文脈で位置づけ、パリティ単体に役割を載せすぎないほうが誤解を避けられます。
パリティチェックは、データ中の「1」の個数の偶奇を利用して誤りを検出する、シンプルで軽量な方式です。1ビット誤りは確実に検出できますが、偶数個のビット誤りは見逃し得るため、強い信頼性が必要な場面ではCRCやECC、再送制御などと組み合わせて使うのが基本です。パリティの強み(実装コストを抑えやすい)と限界(検出漏れの性質、訂正不可)を理解し、要件に応じて適切な方式を選ぶことが重要です。
データ中の「1」の個数の偶奇を利用し、パリティビットとの矛盾でビット誤りを検出する方式です。
データ+パリティビットの「1」の総数を奇数に揃えるか、偶数に揃えるかの違いです。検出能力自体は同等です。
奇数個のビット反転を検出できます。特に1ビット誤りは確実に検出できます。
偶数個のビット反転は偶奇が変わらないため、検出できない(見逃す)可能性があります。
できません。矛盾から「誤りの可能性」を検出するだけで、誤ったビット位置を特定できないためです。
使えません。意図的にデータとパリティビットを整合するように書き換えられると検出できないためです。
一般的なEthernetフレームの誤り検出はFCS(CRC)です。パリティが中心になるケースは一般的ではありません。
パリティメモリは主に検出のみで訂正はできません。ECCメモリは方式により1ビット訂正などが可能です。
送信側と受信側で奇数/偶数パリティ、ビット順、対象範囲などの規則を完全に一致させることです。
軽量に異常検知したい場合に向きます。高信頼性が必要ならCRCやECC、再送制御などを優先します。