CRC-16 チェックサムの計算
エンコード処理はすべてブラウザ内で完結します。データは送信されません
テキストの CRC-16 チェックサムを求めます。CRC-16 は産業機器や組み込みの現場では CRC-32 より頻繁に現れます —— Modbus のフレーム末尾2バイト、1-Wire デバイスの ROM チェックサム、Bluetooth や X.25 のフレーム検査がすべてこれを使っています。そして、これが最も変種の多い一族でもあります:0x8005 や 0x1021 といった1つの多項式に、異なる初期値・ビット反転の有無・最終 XOR 値を組み合わせると、30を超える互換性のないアルゴリズムが生まれ、しかも算出される数値は互いに無関係です。ここではよく使われる9つを収録し、それぞれに用途と出所を添えています。切り替える前に、相手側がどれを期待しているかを必ず確認してください —— CRC 系のツールが最も間違えやすく、最も原因を突き止めにくいところです。
機能
- よく使われる9つの変種:ARC・Modbus・USB・MAXIM・CCITT-FALSE・XMODEM・KERMIT・X-25・DNP
- 各変種に用途を明記 —— Modbus のフレーム、1-Wire デバイス、X.25 のフレームでそれぞれ別のものを使います
- 出力は16進数(大文字・小文字を切替可)または10進数
- 日本語は UTF-8 バイトで計算し、他の実装と一致します
- 各変種はパラメータ目録の check 値に固定されているので、パラメータの写し間違いが起きません
- 計算は端末内で完結し、内容がアップロードされることはありません
使い方
- 入力欄に内容を貼り付けると、結果がリアルタイムで表示されます
- 相手のシステムに合わせて変種を選びます(Modbus なら CRC-16/MODBUS)
- 必要に応じて16進数/10進数、大文字を切り替えます
- 「コピー」でチェックサムを取り出せます
よくある質問
- CRC-16 にこんなに変種があるのはなぜですか?
- CRC-16 の「16」はチェックサムが16ビット幅であることしか定めておらず、それ以外は何も決めていないからです。どの多項式を使うか、初期値は何か、入力バイトをビット反転するか、結果に定数を XOR するか —— この4つのパラメータは長年にわたり各ベンダーが独自に決めてきたため、同じ名前の下に数十の互換性のない実装が生まれました。ARC(IBM とも呼ばれます)が最初で、Modbus・USB・X-25 はいずれもそれを各用途向けに変えたものです。名前では見分けがつかないため、ここでは全項目に用途を添えています。
- Modbus が使うのはどれですか?
- CRC-16/MODBUS です:多項式 0x8005、初期値 0xFFFF、入出力ともビット反転、最終 XOR なし。Modbus RTU のフレームでは末尾2バイトがこれで、下位バイトが先に来ます。なお Modbus TCP はこれを使いません(下位のイーサネット層が完全性を担います)。手で計算が必要なのは RTU と ASCII モードだけです。
- 相手のシステムがどの変種を使っているかは、どう調べますか?
- 信頼できる順に3つあります。第一にプロトコル仕様書で、通常は多項式と初期値が明記されています。第二に既知の検証値で、標準的な検査入力は文字列 `123456789` です —— 本ツールの各変種は CRC パラメータ目録に登録された値と一致するので、順に試して合致したものが答えです。第三にソースコードで、0x8005 をビット反転した 0xA001 がコード中にあれば、まず ARC 系と確定できます。
- マニュアルの値と一致しないのはなぜですか?
- ほぼ2つの原因です。ひとつは変種の選択ミス —— 同じ 0x8005 でも ARC は BB3D、Modbus は 4B37、MAXIM は 44C2 になります。もうひとつはバイト範囲の取り違えです。CRC はバイト列に対して計算するので、こちらのデータ部だけを貼り付け、相手が「アドレス+機能コード+データ」のフレーム全体で計算していれば、一致するはずがありません。両者の入力範囲が完全に同一か確認してください。
関連ツール
CRC-32
エンコードテキストの CRC-32 チェックサムを計算します。IEEE・Castagnoli・Koopman など6つの変種に対応し、16進数または10進数で出力します。
Hex 変換
エンコード16 進数とテキストを相互変換します。0x・\x・空白・コロンなどの表記に対応し、日本語は UTF-8 でバイト単位に正しく復元、バイト数も表示します。
ハッシュ計算
エンコードMD5・SHA-1・SHA-256・SHA-512 のダイジェストを計算します(旧システム向けの MD4・MD2 も可)。日本語も UTF-8 バイトで計算します。
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。
HTML 実体参照
エンコード< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&lt; は山括弧ではなく < になります。すべてブラウザ内で処理します。