チェックサム
「チェックサム」という名称は、チェックサムの符号値そのものを指すこともある。
また、誤り検出その他データの検証のための符号として広く使われてきた経緯から、俗に誤り検出符号自体の代名詞としても用いられる場合がある。例えばCRCの符号値やMD5のハッシュ値を、それぞれ「CRCチェックサム」「MD5チェックサム」と呼ぶことがある。これらは算出方法が異なりsumでもないため、「チェックサム」と呼ぶことは語義的には正確ではないものの、「(チェックサムよりも)信頼性の高い誤り検出符号」程度の意味で使われる。
算出方法は非常に簡単で、もっとも単純なものはワード列の個々のワードの総和 (sum) の下位1ワードをそのまま符号値とするものであり、1ワードを何ビットとするかは実装によって異なる。
例えば、1ワードが8ビットの以下のワード列の総和は(十六進法で)78であるので、その検査合計は「78」となる。
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
総和のどのビット群を符号値とするか、符号値をどのように扱うかなどで、派生した種類がある。
ネットワークを利用してのデータ送信時、IPパケットにデータを分割した際のIPヘッダの検査における利用例を以下に示す。
IPヘッダのチェックサム欄にゼロをセット
IPヘッダを16ビット単位で加算
総和の下位16ビットの補数をIPヘッダのチェックサム欄にセット
送信
受信したらIPヘッダを16ビット単位で加算
総和がゼロならば正常
チェックサム欄にはチェックサム欄がゼロの場合におけるチェックサムの補数がセットされているので、総和 = チェックサム欄以外のチェックサム + チェックサム欄以外のチェックサムの補数 = ゼロ になれば正しい。
Intel HEXなどのROMデータの場合、8bit単位で加算して32bit表示を行う事が一般的である。例えば12 34 56 78場合のチェックサムは0x12+0x34+0x56+0x78=0x00000114となる。