IT用語集

パリティチェックとは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

パリティチェックは、データ通信や記憶装置で使われてきた代表的なエラー検出方式の一つです。本記事では、パリティチェックの基本概念から仕組み、実装の考え方、限界と適用しやすい場面までをまとめます。あわせて、より高い信頼性が求められる場面で併用されやすい方式(CRCやECCなど)との関係にも触れます。

パリティチェックの概要

パリティチェックの定義と目的

パリティチェックとは、データ中の「1」の個数(ビットの偶奇)を利用して誤りを検出する方式です。データに1ビット(パリティビット)を付加し、受信側(読み出し側)でも同じ規則で偶奇を確認します。規則に矛盾があれば「何らかのビット誤りが起きた可能性が高い」と判断できます。

注意点として、パリティチェックは改ざん検知(セキュリティ目的)の仕組みではありません。攻撃者が意図的にビットを変えた場合でも、パリティビットまで整合するように書き換えれば検出できないためです。パリティチェックが担うのは、あくまで伝送・記憶過程で偶発的に起きるビット誤りの検出です。

奇数パリティと偶数パリティの違い

パリティチェックには、奇数パリティと偶数パリティがあります。

  • 奇数パリティ:データ+パリティビットの「1」の総数が奇数になるように調整する
  • 偶数パリティ:データ+パリティビットの「1」の総数が偶数になるように調整する

どちらを選んでも、検出能力そのものは同じです。設計・規格で決まっている場合はそれに従い、そうでなければ運用上の統一方針として決めます。

パリティビットの付加方法

パリティビットは次の手順で付加します。

  1. 送信(保存)するデータのビット列を確定する
  2. データ中の「1」の個数を数える(またはXORで偶奇を算出する)
  3. 奇数パリティ/偶数パリティの規則に合うよう、パリティビットを0/1で決める
  4. データにパリティビットを付加して送信(保存)する

受信(読み出し)側では、受け取ったデータ+パリティビットについて同じ規則で偶奇を計算し、矛盾があればエラーとします。

パリティチェックの適用例

パリティチェックは「シンプルで実装コストを抑えやすい」という性質から、主に次のような場面で使われてきました。

適用例説明
シリアル通信RS-232Cなどで、文字(フレーム)単位にパリティビットを付加して誤りを検出する設定が使われます。
メモリ(パリティメモリ)データとパリティビットを一緒に保持し、読み出し時に矛盾がないかを確認します(一般的には検出のみで、訂正はしません)。
内部バス/周辺回路ハードウェア内の単純な誤り検出として、パリティが採用されることがあります。
ネットワーク(補足)現代の代表例であるEthernetのフレーム誤り検出は主にFCS(CRC)です。パリティが中心になるケースは一般的ではありません。

パリティチェックは有用ですが、検出能力に明確な限界があるため、より高い信頼性が求められる場面ではCRCやECC(例:SECDEDなど)といった方式が採用されます。

パリティチェックのアルゴリズム

パリティビットの生成方法

パリティビットは「1の個数が偶数か奇数か」を表す1ビットです。実装上は、ビット列のXOR(排他的論理和)で偶奇を求めるのが定番です。たとえば、すべてのデータビットをXORして得られる値は「1の個数が奇数なら1、偶数なら0」になります(定義の表現は実装や仕様により変わるため、最終的には奇数/偶数パリティの規則に合わせて決めます)。

パリティチェックの実行手順

  1. 受信したデータのビット列とパリティビットを取得する
  2. 受信データの偶奇(パリティ)を計算する
  3. パリティビットと規則(奇数/偶数)に照らして矛盾がないか確認する
  4. 矛盾があればエラーとして扱う(破棄、再送要求、上位層へ通知など)

エラー検出の仕組み

パリティチェックが検出できるのは、ビット誤りの個数が「奇数」のときです。1ビットが反転すると偶奇が必ず変わるため、1ビット誤りは確実に検出できます。

一方で、2ビット・4ビットなど偶数個のビットが同時に反転すると、偶奇が元のままになり得ます。そのためパリティチェックは、誤りが起きていても「矛盾なし」と判定して見逃す可能性があります。

パリティチェックの限界と補足

パリティチェックの限界は次のとおりです。

  • 検出できるのは奇数個のビット誤りであり、偶数個のビット誤りは見逃し得る
  • 検出はできても訂正はできない(どのビットが誤ったか特定できない)
  • パリティビット自体の誤りも「矛盾」として検出される(原因の切り分けには別の情報が必要になる)

このため、設計では「どの程度の誤り率・どの程度の信頼性が必要か」を基準に、CRCやECC(ハミング符号、SECDEDなど)を使うか、あるいは上位層の再送制御(ARQ)と組み合わせるかを判断します。

パリティチェックの実装

パリティチェックの実装方法

実装の流れはシンプルです。

  1. 送信(保存)するデータのビット列を確定する
  2. 偶奇を計算してパリティビットを生成する
  3. データ+パリティビットを送信(保存)する
  4. 受信(読み出し)側で同様に偶奇を計算し、矛盾があればエラーとして扱う

実装上のポイントは「ビット長」「パリティビットの配置」「奇数/偶数パリティの統一」「エラー時の扱い(破棄・再送・ログ・アラート)」を仕様として明確にすることです。

言語別のパリティ計算の考え方

パリティ計算は「ビットを1つずつ見てXORする」か、「ビットカウント(popcount)して偶奇を見る」かのどちらかが基本です。多くの言語・CPUにはビットカウント命令や組み込み関数があるため、性能要件が厳しい場合はそれらの利用も検討します。

パリティチェックの実装上の注意点

  • 送信側と受信側で規則を一致させる(奇数/偶数、ビット順、対象ビット範囲)
  • パリティ対象の範囲を明確にする(ヘッダ含む/含まない、制御ビット扱いなど)
  • エラー時の設計を先に決める(再送するのか、破棄するのか、どこに通知するのか)
  • ログと監視を入れて、増加傾向(配線劣化、ノイズ、故障)に気づけるようにする

パリティチェックのテストと検証

  1. 正常データで矛盾が出ないことを確認する
  2. 1ビット反転を意図的に入れて、確実に検出できることを確認する
  3. 2ビット反転など「見逃し得るパターン」を作り、限界が仕様どおりであることを確認する
  4. エラー時の挙動(再送、破棄、通知、ログ)が設計どおりに動くことを確認する

パリティチェックの応用と発展

パリティチェックの応用分野

パリティチェックは、軽量に実装できる誤り検出として、通信・記憶・内部バスなどの分野で利用されてきました。現在も「簡単に異常を検知したい」場面では選択肢になりますが、信頼性要求が高い領域では、より検出能力の高い方式が主流です。

パリティチェックと他のエラー検出手法の比較

手法特徴検出・訂正能力(代表的な性質)
パリティチェック非常に軽量で実装が容易奇数個のビット誤りを検出(1ビット誤りは確実に検出)
チェックサム実装容易。用途により強弱がある多くの誤りを検出できるが、検出漏れの性質は方式次第
CRC(巡回冗長検査)通信で広く使われる。検出能力が高い多くの誤りパターンを高確率で検出(多項式・ビット長に依存)
ECC(例:ハミング符号、SECDEDなど)メモリ等で利用。訂正も視野に入る方式により1ビット訂正、2ビット検出などが可能

パリティチェックは「軽いが検出能力は限定的」、CRCやECCは「検出能力が高いが、冗長ビットや計算コストが増える」という関係で捉えると判断しやすくなります。

発展的な手法(2次元パリティなど)

パリティの考え方を拡張したものとして、2次元パリティ(行と列の両方にパリティを付ける)があります。たとえば、行パリティと列パリティを併用すると、1ビット誤りであれば誤り位置を特定できるケースがあります。

ただし、現代の実システムでは、汎用の誤り検出としてはCRC、訂正を含めるならECCといった実績ある方式が採用されることが多く、パリティを拡張して対応するより、目的に合った方式を選ぶほうが自然です。

「最新動向」を扱う際の注意

パリティチェックは基本概念が確立しており、近年の技術動向としては「パリティが主流方式を置き換える」といった話題は多くありません。最新動向として触れる場合は、誤り制御全体(高速化、低電力化、ハードウェア支援、通信方式に応じた符号化など)の文脈で位置づけ、パリティ単体に役割を載せすぎないほうが誤解を避けられます。

まとめ

パリティチェックは、データ中の「1」の個数の偶奇を利用して誤りを検出する、シンプルで軽量な方式です。1ビット誤りは確実に検出できますが、偶数個のビット誤りは見逃し得るため、強い信頼性が必要な場面ではCRCやECC、再送制御などと組み合わせて使うのが基本です。パリティの強み(実装コストを抑えやすい)と限界(検出漏れの性質、訂正不可)を理解し、要件に応じて適切な方式を選ぶことが重要です。

FAQ

パリティチェックとは何ですか?

データ中の「1」の個数の偶奇を利用し、パリティビットとの矛盾でビット誤りを検出する方式です。

奇数パリティと偶数パリティは何が違いますか?

データ+パリティビットの「1」の総数を奇数に揃えるか、偶数に揃えるかの違いです。検出能力自体は同等です。

パリティチェックで検出できる誤りはどのようなものですか?

奇数個のビット反転を検出できます。特に1ビット誤りは確実に検出できます。

パリティチェックで検出できない誤りはありますか?

偶数個のビット反転は偶奇が変わらないため、検出できない(見逃す)可能性があります。

パリティチェックは誤りを訂正できますか?

できません。矛盾から「誤りの可能性」を検出するだけで、誤ったビット位置を特定できないためです。

パリティチェックは改ざん検知(セキュリティ)に使えますか?

使えません。意図的にデータとパリティビットを整合するように書き換えられると検出できないためです。

Ethernetはパリティチェックで誤り検出していますか?

一般的なEthernetフレームの誤り検出はFCS(CRC)です。パリティが中心になるケースは一般的ではありません。

パリティメモリとECCメモリの違いは何ですか?

パリティメモリは主に検出のみで訂正はできません。ECCメモリは方式により1ビット訂正などが可能です。

パリティチェックの実装で最も重要な注意点は何ですか?

送信側と受信側で奇数/偶数パリティ、ビット順、対象範囲などの規則を完全に一致させることです。

パリティチェックはどんなときに選ぶべきですか?

軽量に異常検知したい場合に向きます。高信頼性が必要ならCRCやECC、再送制御などを優先します。

記事を書いた人

ソリトンシステムズ・マーケティングチーム