# CRC Calculator

> 名前のある CRC を一度に全部計算し、Rocksoft の6パラメータを自分で入れ、データとチェックサムからどのアルゴリズムかを逆引きします。ブラウザ内で完結。

- URL: https://bytescope.dev/ja/crc-calculator/
- Locale: ja · Also: [en](https://bytescope.dev/en/crc-calculator.md) · [zh-Hant](https://bytescope.dev/zh-Hant/crc-calculator.md)
- Runs: バイト列はブラウザから出ません。計算はすべてこのページの中です。
- Requires: Any modern browser (Chrome, Edge, Firefox, Safari), desktop and mobile.
- Updated: 2026-09-08

## What it does

### フレーム末尾の2バイト

プロトコルのダンプが `4b 37` で終わっていて、渡された資料には「CRC-16」としか書いていない。それはアルゴリズム名ではなく一族の名前です。公表されている16ビット CRC は何十種類もあり、多項式・初期値・ビット順・最後の XOR が違い、違うものを選ぶと、間違ったという合図なしに間違った答えが出ます。だからこのページは選ばせません。フレームをテキストでも16進ダンプでもファイルでも貼れば、`CRC-3/GSM` から `CRC-82/DARC` まで公表されている 113 種を一度に計算します。手元のバイト列と一致する行が見つかれば、名前ごと答えが出たことになります。

### CRC を決める6つの数

データシートが CRC をきちんと書いているときは、Rocksoft モデルで書いています。`width`、`poly`、`init`、`refin`、`refout`、`xorout`。それを入れれば結果がすぐ出ますが、隣にもう1つ、見た目より大事な数が出ます。`check` 値、つまりそのパラメータ自身が `123456789` の9文字に対して出す値です。公表されている CRC は必ずこれを書いていますし、まともなデータシートも書いています。ここの check が手元の文書の check と一致すれば、入れた6つの数はその文書が言っているアルゴリズムそのもので、左の結果はそこで初めて信用に値します。計算機と当てずっぽうの差はここです。

### アルゴリズムを探す

名前がどれも合わず、データシートも存在しないなら、フレームとそれが載せているチェックサムを探索に渡してください。まず公表されている全モデルを試し、次に8ビットの多項式を全部、16ビットの多項式を全部、`init` と `xorout` は全0か全1、反転は両方の組み合わせで総当たりします。報告されたものは必ずあなたの標本を満たします。見落とすことはあっても、でっち上げることはありません。境界は隠さず書いてあります。16ビットより広い幅は総当たりしません。40億通りの多項式はブラウザのタブが終えられる探索ではないからです。64 KB を超える標本も受け付けません。本探索の前に、113 個の1ビットずつ回るエンジンが標本全体を舐めてしまうからです。逆引きは1メッセージ用で、ファームウェア1本分ではありません。

### パケット末尾が必ず CRC とはかぎらない

もっと単純な何かで終わるプロトコルはいくらでもあり、「それはそもそも CRC ではない」と分かることも立派な答えです。同じ入力を CRC 以外の8種のチェックサムにも通します。`sum8`、`sum16`、`xor8`、`fletcher16`、`fletcher32`、`adler32`、RFC 1071 のインターネットチェックサム、そして BSD の `sum(1)` の右回転して足すやつ。さらに NMEA 0183 の欄は、規格がそう定めているのでバイト列ではなくセンテンスを取ります。全部このページの中の Web Worker で動きます。アップロードなし、アカウントなし、そのとき解析していたファームウェアについて誰かに説明する必要もなし。

## Limits

Does not compute cryptographic hashes (use file-hash), and does not brute-force CRCs wider than 16 bits; reverse lookup takes a sample of at most 64 KB, not a whole file.

## Machine output

Copy JSON copies an envelope `{ tool, url, generatedAt, userAgentHint, result }`. `tool` is `"crc-calculator"`; `result` is the CRC / checksum snapshot below. CRC values are hex strings (including widths above 32 bits). The input text, hex dump, file bytes, file name, and hex preview are omitted.

- `byteLength` (number | null) — Input size in bytes. `null` = size was not supplied.
- `custom` (object | null) — Custom Rocksoft model on screen. `null` = parameters were not valid so nothing was computed. Fields: `width`, `poly`, `init`, `xorout` (hex strings), `refin`, `refout` (booleans), `value` (hex digest of the input, or `null` if not computed), `check` (hex digest of ASCII `"123456789"`, or `null` if not computed), `matches` (catalog name, or `null` when computed with no match).
- `catalog` (object) — Named models in on-screen table order, capped at 200. `rows` is the copied list (each: `name`, `aliases`, `width`, `value`, `check`, `poly`, `init`, `refin`, `refout`, `xorout`). `truncated` is `true` when more rows exist than were copied. `totalCount` is the real row count, not the copied length.
- `reverseLookup` (object | null) — `null` = reverse search was not run. When present: `hits` (capped at 200; each `kind` is `"catalog"` or `"search"`, plus `name` or `null`, `width`, `poly`, `init`, `refin`, `refout`, `xorout`), `truncated`, `totalCount` (real hit count). Empty `hits` with `truncated` false means the search ran and found nothing.
- `checksums` (array of objects) — Non-CRC checksums in on-screen order. Each: `id`, `value` (hex), `decimal`, `bits`. Empty when they have not been computed.
- `nmeaChecksum` (string | null) — NMEA checksum as two lowercase hex digits. `null` = no sentence was entered.

## FAQ

### 「CRC-32」はどれのことですか？

たいていは `CRC-32/ISO-HDLC` です。zip、gzip、PNG、イーサネットのあれ。ただしこの名前は `CRC-32` や `CRC-32/ADCCP` としても公表されていますし、CRC-32C と書いてあれば別物の `CRC-32/ISCSI` で、多項式からして違います。表には正式な reveng 名の隣に別名を全部並べてあるので、手元の資料の呼び方で検索して、それが実際に指すモデルに着地できます。

### 手元の機器と結果が合いません。だいたい何が原因ですか？

多項式であることはまずありません。原因はバイトの範囲です。チェックサムは端末に出ていないヘッダまで掛かっているか、長さフィールドを数に入れているか、思っているより1バイト手前で終わっています。次に多いのは反転で、`refin` と `refout` こそが `CRC-16/ARC` と `CRC-16/XMODEM` を分けています。掛かっていると思うバイト列そのもので逆引きを試してください。何も出てこないなら、変えるべきはアルゴリズムではなくバイト列です。

### `check` 値は何のためにあり、なぜ何度も出てくるのですか？

ASCII 9文字 `123456789` に対するそのアルゴリズムの値で、このページを信用しなくてもパラメータを検証できる唯一の数です。公表されている CRC は必ず書いています。パラメータを入れて、ここに出る check とデータシートに印刷されている check を比べれば、自分のデータを1バイトも使わないうちに、両方の文書が同じアルゴリズムを指していると確認できます。

### なぜ逆引きはファームウェア1本を受け付けないのですか？

最初にやることが、公表されている 113 モデル全部を標本全体に対して回すことで、それは予算や中止が効くより前だからです。しかもエンジンは `CRC-82/DARC` のような幅でも正確であるように、あえて1ビットずつ回しています。64 KB ならその工程は2秒ほど、1 MB なら30秒ほどかかり、見た目はタブが固まったのと区別がつきません。上限は 64 KB で、拒否は探索が始まる前に起きます。大きいファイルの CRC を計算するのは問題ありません。それが上の表で、あちらは一度に1アルゴリズムです。

### 改ざんの検出に CRC は使えますか？

使えませんし、そういう用途のものではありません。CRC が見つけるのは偶発的な壊れ方——線上で反転した1ビット、フラッシュの不良ブロック——で、それは非常に得意です。線形なので、データを書き換えられる人は末尾を計算し直すことも、元の値に戻す余分なビットを求めることもできます。相手がノイズの多いケーブルではなく人間なら、必要なのは暗号学的ハッシュ、ファイルごと差し替えられうるなら MAC です。

## Related tools

- [File Hash](https://bytescope.dev/ja/file-hash.md) — CRC ではなくハッシュが要るとき、ファイル全体の SHA-256 などを。
- [Hex Viewer / Editor](https://bytescope.dev/ja/hex-editor.md) — バイトを開いて、チェックサムが掛かっている場所を見つけて直す。
- [Bitwise Calculator](https://bytescope.dev/ja/bitwise-calculator.md) — シフトとマスクとビット格子。多項式が住んでいるレジスタのために。
