図2.13から分かるように、距離が3のコードワード間では、2ビットのエラーが起こると隣のコードワードを囲む1ビットエラーの球に入ってしまう。そして、受信されたデータに対してシンドロームを計算して訂正を行うと、 2ビットのエラーが起こったコードワード1をコードワード2の1ビットエラーとみなして誤訂正してしまう。このようなケースでは、ハードウェアは正常に1ビットエラーを訂正したと思っているので、エラーがあったことは見逃され、訂正されたデータは実は誤っているという最悪の事態になってしまう。

これは都合が悪いので、実用としては最小距離を4として、1ビットエラーを訂正するのに加えて2ビットエラーの場合は誤訂正を行わず、訂正不能なエラーが発生したという通知を行うコードが用いられている。このようなコードは、Single-bit Error Correction Double-bit Error Detection(SECDED)コードと呼ばれる。

図2.16 1ビット訂正ハミングコードのSECDED化

図2.14に示した1ビット訂正ハミングコードをベースに2ビットエラーの検出機能を加えるには、図2.16のように全部の要素が1の行を追加し、さらに、S0~S2が0の列を追加する。そして、この最後の列が全ビットのパリティーを計算した追加のチェックビットとなる。

このHマトリクスに従って作られたコードワードではS0~S2の値は1ビット訂正コードの場合と同じであり、エラーが無い場合は全て0になる。また、全ビットパリティに対するシンドロームも0になる。

1ビットエラーが起こったときは、全ビットパリティが1になる。そしてS0~S2がどのビットがエラーであるかを示している。なお、右端にある追加のチェックビットがエラーした場合は全ビットパリティーが1でS0~S2は0となるので、その他のビットがエラーした場合と区別できる。

そして、2ビットエラーが起こった場合は、全ビットパリティは0に戻るが、S0~S2はエラーが起こった2ビットによって非0の値が出てくる。ただし、この時のシンドロームの値は正しいエラービットの位置を示してはいない。つまり、全ビットパリティが0で、シンドロームが非0の場合は2ビットエラーが起こっているが、それがどのビットであるかは分からず訂正できないということになる。