CRC 計算ツール(CRC8・CRC16・CRC32)
テキスト、16進数、Base64、ファイルから CRC チェックサムを計算します。CRC-8 から CRC-64 まで 100 種類の標準アルゴリズムを選べるほか、生成多項式・初期値・ビット反転・出力 XOR を自由に指定できます。入力と同時に結果が更新されます。
計算結果CRC-32
- 10進数
- 3421780262
- 2進数
- 11001011111101000011100100100110
- バイト列(ビッグエンディアン)
- CB F4 39 26
- バイト列(リトルエンディアン)
- 26 39 F4 CB
"123456789" のチェック値: 0xCBF43926
この CRC のソースコード
上のパラメータから生成したコードです。テーブルを使わないビット演算版なので、マイコンにもそのまま移植できます。
#include <stddef.h>
#include <stdint.h>
uint32_t crc_32(const uint8_t *data, size_t len)
{
uint32_t crc = 0xFFFFFFFF;
while (len--) {
crc ^= *data++;
for (int i = 0; i < 8; i++)
crc = (crc & 1) ? (crc >> 1) ^ 0xEDB88320 : crc >> 1;
}
return crc ^ 0xFFFFFFFF;
}
すべての CRC アルゴリズムの計算結果
行をクリックすると、そのパラメータを計算機に読み込みます。
| アルゴリズム | 結果 | Poly | Init | RefIn | RefOut | XorOut | Check | 用途 |
|---|---|---|---|---|---|---|---|---|
| 0x4 | 0x3 | 0x0 | false | false | 0x7 | 0x4 | GSM mobile networks | |
| 0x6 | 0x3 | 0x7 | true | true | 0x0 | 0x6 | Robust Header Compression | |
| 0x7 | 0x3 | 0x0 | true | true | 0x0 | 0x7 | ITU-T G.704 (E1 framing) | |
| 0x19 | 0x05 | 0x1F | true | true | 0x1F | 0x19 | USB token packets | |
| 0x00 | 0x09 | 0x09 | false | false | 0x00 | 0x00 | EPC Gen2 RFID | |
| 0x07 | 0x15 | 0x00 | true | true | 0x00 | 0x07 | ITU-T G.704 | |
| 0x06 | 0x03 | 0x00 | true | true | 0x00 | 0x06 | ITU-T G.704 | |
| 0x75 | 0x09 | 0x00 | false | false | 0x00 | 0x75 | SD / MMC card commands | |
| 0xF4 | 0x07 | 0x00 | false | false | 0x00 | 0xF4 | SMBus PEC, I2C sensors | |
| 0xA1 | 0x31 | 0x00 | true | true | 0x00 | 0xA1 | Dallas/Maxim 1-Wire (DS18B20) | |
| 0xD0 | 0x07 | 0xFF | true | true | 0x00 | 0xD0 | Robust Header Compression | |
| 0xA1 | 0x07 | 0x00 | false | false | 0x55 | 0xA1 | ATM HEC (ITU-T I.432.1) | |
| 0x4B | 0x1D | 0xFF | false | false | 0xFF | 0x4B | Automotive SAE J1850, AUTOSAR E2E | |
| 0xDF | 0x2F | 0xFF | false | false | 0xFF | 0xDF | AUTOSAR E2E profiles | |
| 0xDA | 0x9B | 0xFF | false | false | 0x00 | 0xDA | CDMA2000 mobile | |
| 0x15 | 0x39 | 0x00 | true | true | 0x00 | 0x15 | Data Radio Channel | |
| 0xBC | 0xD5 | 0x00 | false | false | 0x00 | 0xBC | DVB-S2 baseband header | |
| 0x97 | 0x1D | 0xFF | true | true | 0x00 | 0x97 | AES3 / EBU digital audio | |
| 0x7E | 0x1D | 0xFD | false | false | 0x00 | 0x7E | Philips I-CODE RFID | |
| 0x25 | 0x9B | 0x00 | true | true | 0x00 | 0x25 | WCDMA mobile | |
| 0x26 | 0xA7 | 0x00 | true | true | 0x00 | 0x26 | Bluetooth HEC | |
| 0xEA | 0x9B | 0x00 | false | false | 0x00 | 0xEA | LTE (3GPP TS 36.212) | |
| 0xF7 | 0x31 | 0xFF | false | false | 0x00 | 0xF7 | HD Radio, Sensirion SHT sensors | |
| 0x3E | 0x2F | 0x00 | false | false | 0x00 | 0x3E | openSAFETY | |
| 0x37 | 0x1D | 0x00 | false | false | 0x00 | 0x37 | GSM | |
| 0x94 | 0x49 | 0x00 | false | false | 0xFF | 0x94 | GSM | |
| 0xB4 | 0x1D | 0xFF | false | false | 0x00 | 0xB4 | HITAG RFID | |
| 0x99 | 0x1D | 0xC7 | false | false | 0x00 | 0x99 | MIFARE application directory | |
| 0x199 | 0x233 | 0x000 | false | false | 0x000 | 0x199 | ATM AAL 3/4 | |
| 0x5A3 | 0x385 | 0x01A | false | false | 0x000 | 0x5A3 | FlexRay header | |
| 0xF5B | 0x80F | 0x000 | false | false | 0x000 | 0xF5B | DECT cordless | |
| 0xDAF | 0x80F | 0x000 | false | true | 0x000 | 0xDAF | 3GPP UMTS | |
| 0xD4D | 0xF13 | 0xFFF | false | false | 0x000 | 0xD4D | CDMA2000 mobile | |
| 0x04FA | 0x1CF5 | 0x0000 | false | false | 0x0000 | 0x04FA | BBC time signal | |
| 0x082D | 0x0805 | 0x0000 | true | true | 0x0000 | 0x082D | Data Radio Channel | |
| 0x059E | 0x4599 | 0x0000 | false | false | 0x0000 | 0x059E | Classical CAN bus frames | |
| 0x2566 | 0x6815 | 0x0000 | false | false | 0x0001 | 0x2566 | MPT 1327 trunked radio | |
| 0xBB3D | 0x8005 | 0x0000 | true | true | 0x0000 | 0xBB3D | ARC, LHA, legacy disk formats | |
| 0x4B37 | 0x8005 | 0xFFFF | true | true | 0x0000 | 0x4B37 | Modbus RTU frames | |
| 0xB4C8 | 0x8005 | 0xFFFF | true | true | 0xFFFF | 0xB4C8 | USB data packets | |
| 0x44C2 | 0x8005 | 0x0000 | true | true | 0xFFFF | 0x44C2 | Maxim 1-Wire / iButton | |
| 0x29B1 | 0x1021 | 0xFFFF | false | false | 0x0000 | 0x29B1 | Most "CCITT" implementations, AUTOSAR | |
| 0x31C3 | 0x1021 | 0x0000 | false | false | 0x0000 | 0x31C3 | XMODEM, ZMODEM, SD card data | |
| 0x2189 | 0x1021 | 0x0000 | true | true | 0x0000 | 0x2189 | Kermit, Bluetooth, V.41 | |
| 0x906E | 0x1021 | 0xFFFF | true | true | 0xFFFF | 0x906E | X.25, HDLC, PPP, ISO 14443-B | |
| 0x6F91 | 0x1021 | 0xFFFF | true | true | 0x0000 | 0x6F91 | Microchip MCRF4xx, MAVLink | |
| 0xD64E | 0x1021 | 0xFFFF | false | false | 0xFFFF | 0xD64E | Grundfos GENIbus, EPC RFID | |
| 0xE5CC | 0x1021 | 0x1D0F | false | false | 0x0000 | 0xE5CC | Fujitsu SPI flash | |
| 0xCE3C | 0x1021 | 0x0000 | false | false | 0xFFFF | 0xCE3C | GSM | |
| 0x26B1 | 0x1021 | 0x89EC | true | true | 0x0000 | 0x26B1 | TI TMS37157 transponders | |
| 0x63D0 | 0x1021 | 0xB2AA | true | true | 0x0000 | 0x63D0 | Riello UPS protocol | |
| 0xBF05 | 0x1021 | 0xC6C6 | true | true | 0x0000 | 0xBF05 | ISO 14443-A (MIFARE, NFC-A) | |
| 0xEA82 | 0x3D65 | 0x0000 | true | true | 0xFFFF | 0xEA82 | DNP3 (SCADA) | |
| 0xC2B7 | 0x3D65 | 0x0000 | false | false | 0xFFFF | 0xC2B7 | Wireless M-Bus metering | |
| 0xFEE8 | 0x8005 | 0x0000 | false | false | 0x0000 | 0xFEE8 | Verifone, UMTS | |
| 0xAEE7 | 0x8005 | 0xFFFF | false | false | 0x0000 | 0xAEE7 | RPM package format | |
| 0x9ECF | 0x8005 | 0x800D | false | false | 0x0000 | 0x9ECF | ELV DDS-110 function generator | |
| 0x007E | 0x0589 | 0x0000 | false | false | 0x0001 | 0x007E | DECT cordless | |
| 0x007F | 0x0589 | 0x0000 | false | false | 0x0000 | 0x007F | DECT cordless | |
| 0xD0DB | 0x8BB7 | 0x0000 | false | false | 0x0000 | 0xD0DB | SCSI data integrity field | |
| 0x0FB3 | 0xA097 | 0x0000 | false | false | 0x0000 | 0x0FB3 | Teledisk disk images | |
| 0x4C06 | 0xC867 | 0xFFFF | false | false | 0x0000 | 0x4C06 | CDMA2000 mobile | |
| 0xA819 | 0x1DCF | 0xFFFF | false | false | 0xFFFF | 0xA819 | PROFIBUS PA | |
| 0x5D38 | 0x5935 | 0x0000 | false | false | 0x0000 | 0x5D38 | openSAFETY | |
| 0x20FE | 0x755B | 0x0000 | false | false | 0x0000 | 0x20FE | openSAFETY | |
| 0xBDF4 | 0x6F63 | 0x0000 | false | false | 0x0000 | 0xBDF4 | LoJack vehicle tracking | |
| 0xA066 | 0x080B | 0xFFFF | true | true | 0x0000 | 0xA066 | HD Radio | |
| 0x772B | 0x5935 | 0xFFFF | false | false | 0x0000 | 0x772B | M17 digital radio | |
| 0x04F03 | 0x1685B | 0x00000 | false | false | 0x00000 | 0x04F03 | CAN FD frames up to 16 bytes | |
| 0x0ED841 | 0x102899 | 0x000000 | false | false | 0x000000 | 0x0ED841 | CAN FD frames over 16 bytes | |
| 0x21CF02 | 0x864CFB | 0xB704CE | false | false | 0x000000 | 0x21CF02 | OpenPGP ASCII armor | |
| 0xC25A56 | 0x00065B | 0x555555 | true | true | 0x000000 | 0xC25A56 | Bluetooth Low Energy packets | |
| 0xCDE703 | 0x864CFB | 0x000000 | false | false | 0x000000 | 0xCDE703 | LTE, RTCM / GNSS (CRC-24Q) | |
| 0x23EF52 | 0x800063 | 0x000000 | false | false | 0x000000 | 0x23EF52 | LTE code blocks | |
| 0x7979BD | 0x5D6DCB | 0xFEDCBA | false | false | 0x000000 | 0x7979BD | FlexRay channel A | |
| 0x1F23B8 | 0x5D6DCB | 0xABCDEF | false | false | 0x000000 | 0x1F23B8 | FlexRay channel B | |
| 0xB4F3E6 | 0x328B63 | 0xFFFFFF | false | false | 0xFFFFFF | 0xB4F3E6 | Interlaken protocol | |
| 0x200FA5 | 0x800063 | 0xFFFFFF | false | false | 0xFFFFFF | 0x200FA5 | OS-9 module CRC | |
| 0x04C34ABF | 0x2030B9C7 | 0x3FFFFFFF | false | false | 0x3FFFFFFF | 0x04C34ABF | CDMA (TIA-95) | |
| 0x0CE9E46C | 0x04C11DB7 | 0x7FFFFFFF | false | false | 0x7FFFFFFF | 0x0CE9E46C | Philips CD-i | |
| 0xCBF43926 | 0x04C11DB7 | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0xCBF43926 | Ethernet, ZIP, gzip, PNG, zlib | |
| 0xE3069283 | 0x1EDC6F41 | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0xE3069283 | iSCSI, SCTP, ext4, Btrfs, SSE4.2 | |
| 0xFC891918 | 0x04C11DB7 | 0xFFFFFFFF | false | false | 0xFFFFFFFF | 0xFC891918 | bzip2, ATM AAL5 | |
| 0x0376E6E7 | 0x04C11DB7 | 0xFFFFFFFF | false | false | 0x00000000 | 0x0376E6E7 | MPEG-2 transport stream, STM32 hardware CRC | |
| 0x765E7680 | 0x04C11DB7 | 0x00000000 | false | false | 0xFFFFFFFF | 0x765E7680 | POSIX cksum (before the length is appended) | |
| 0x340BC6D9 | 0x04C11DB7 | 0xFFFFFFFF | true | true | 0x00000000 | 0x340BC6D9 | Altera JAM, bitwise NOT of CRC-32 | |
| 0x87315576 | 0xA833982B | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0x87315576 | Base91 encoding | |
| 0x3010BF7F | 0x814141AB | 0x00000000 | false | false | 0x00000000 | 0x3010BF7F | Aviation data (AIXM) | |
| 0xBD0BE338 | 0x000000AF | 0x00000000 | false | false | 0x00000000 | 0xBD0BE338 | XFER | |
| 0x1697D06A | 0xF4ACFB13 | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0x1697D06A | AUTOSAR E2E profile 4 | |
| 0x6EC2EDC4 | 0x8001801B | 0x00000000 | true | true | 0x00000000 | 0x6EC2EDC4 | CD-ROM sector error detection | |
| 0xD2C22F51 | 0x741B8CD7 | 0xFFFFFFFF | true | true | 0x00000000 | 0xD2C22F51 | Multiscale Electrophysiology Format | |
| 0xD4164FC646 | 0x0004820009 | 0x0000000000 | false | false | 0xFFFFFFFFFF | 0xD4164FC646 | GSM control channel | |
| 0x6C40DF5F0B497347 | 0x42F0E1EBA9EA3693 | 0x0000000000000000 | false | false | 0x0000000000000000 | 0x6C40DF5F0B497347 | DLT-1 tape cartridges | |
| 0x995DC9BBDF1939FA | 0x42F0E1EBA9EA3693 | 0xFFFFFFFFFFFFFFFF | true | true | 0xFFFFFFFFFFFFFFFF | 0x995DC9BBDF1939FA | xz / LZMA2 containers | |
| 0xB90956C775A41001 | 0x000000000000001B | 0xFFFFFFFFFFFFFFFF | true | true | 0xFFFFFFFFFFFFFFFF | 0xB90956C775A41001 | ISO 3309, Go hash/crc64 ISO table | |
| 0x62EC59E3F1A4F00A | 0x42F0E1EBA9EA3693 | 0xFFFFFFFFFFFFFFFF | false | false | 0xFFFFFFFFFFFFFFFF | 0x62EC59E3F1A4F00A | Wolfgang Ehrhardt library | |
| 0x75D4B74F024ECEEA | 0x259C84CBA6426349 | 0xFFFFFFFFFFFFFFFF | true | true | 0x0000000000000000 | 0x75D4B74F024ECEEA | Microsoft MS-FCIADS | |
| 0xE9C6D914C4B8D9CA | 0xAD93D23594C935A9 | 0x0000000000000000 | true | true | 0x0000000000000000 | 0xE9C6D914C4B8D9CA | Redis RDB files | |
| 0xAE8B14860A799888 | 0xAD93D23594C93659 | 0xFFFFFFFFFFFFFFFF | true | true | 0xFFFFFFFFFFFFFFFF | 0xAE8B14860A799888 | NVMe, Amazon S3 checksums |
CRC の計算方法
- 入力形式を選ぶ。文字列なら「テキスト」、通信フレームなどのバイト列なら「16進数」、ファイルの CRC を求めるなら「ファイル」を選びます。
- アルゴリズムを選ぶ。初期状態は ZIP や PNG で使われる標準の CRC-32 です。CRC16 や CRC8 を計算する場合は一覧から選ぶか、パラメータを直接書き換えます。
- 結果を確認する。計算結果は 16進数・10進数・2進数と、ビッグエンディアン/リトルエンディアンのバイト列で表示され、そのままコピーできます。
動作確認用の値:標準の CRC-32 で 123456789 は 0xCBF43926、hello は 0x3610A686、日本語(UTF-8)は 0xA80B52E5 になります。
よく使われる CRC の種類とパラメータ
「CRC16」「CRC32」は単一の方式ではなく、生成多項式や初期値が異なる複数の方式の総称です。代表的なものを下の表にまとめます。チェック値は 123456789 を計算した結果です。
| 名称 | 生成多項式 | 初期値 | 反転 | 出力 XOR | チェック値 | 主な用途 |
|---|---|---|---|---|---|---|
| CRC-8 | 07 | 00 | なし | 00 | F4 | SMBus、I2C センサー |
| CRC-8/MAXIM | 31 | 00 | あり | 00 | A1 | 1-Wire(DS18B20) |
| CRC-16/CCITT-FALSE | 1021 | FFFF | なし | 0000 | 29B1 | 一般的な「CRC-CCITT」 |
| CRC-16/XMODEM | 1021 | 0000 | なし | 0000 | 31C3 | XMODEM、SD カード |
| CRC-16/MODBUS | 8005 | FFFF | あり | 0000 | 4B37 | Modbus RTU |
| CRC-16/ARC | 8005 | 0000 | あり | 0000 | BB3D | LHA、IBM CRC-16 |
| CRC-32 | 04C11DB7 | FFFFFFFF | あり | FFFFFFFF | CBF43926 | ZIP、PNG、イーサネット |
| CRC-32C | 1EDC6F41 | FFFFFFFF | あり | FFFFFFFF | E3069283 | iSCSI、ext4、SSE4.2 |
| CRC-32/MPEG-2 | 04C11DB7 | FFFFFFFF | なし | 00000000 | 0376E6E7 | MPEG-2 TS、STM32 の CRC ユニット |
上の計算機の下にある表では、対応する全 100 種類のパラメータと、入力したデータに対する計算結果を一度に確認できます。
パラメータの意味
- ビット幅:CRC の長さ。CRC8 は 8、CRC16 は 16、CRC32 は 32 ビットです。
- 生成多項式:割り算に使う定数。最上位ビットを省いた 16進数で表記します。
0xA001や0xEDB88320は、それぞれ0x8005、0x04C11DB7のビットを逆順にした表記で、同じ多項式です。 - 初期値:計算開始時のレジスタの値。
- 入力ビット反転 / 出力ビット反転:各バイトを LSB 側から処理するか、最終結果のビット順を反転するか。
- 出力 XOR:最後に結果へ XOR する値。
計算結果が合わないときの確認ポイント
- 文字コード:日本語を含む文字列は、UTF-8 と Shift_JIS、UTF-16 でバイト列が変わります。Shift_JIS のデータは 16進数で入力してください。
- 改行コード:末尾の改行の有無、LF と CRLF の違いで結果が変わります。
- バイト順:Modbus RTU は CRC の下位バイトを先に送信します。 結果欄のリトルエンディアン表記と比較してください。
- 計算範囲:CRC 自体のバイトや、ヘッダー・長さフィールドを含めるかどうかはプロトコルごとに決まっています。
CRC16・CRC32 の計算プログラム
計算機の「この CRC のソースコード」には、選択中のパラメータに合わせた C、Python、JavaScript のコードが表示されます。たとえば Modbus の CRC16 は次のようになります。
uint16_t crc16_modbus(const uint8_t *data, size_t len)
{
uint16_t crc = 0xFFFF;
while (len--) {
crc ^= *data++;
for (int i = 0; i < 8; i++)
crc = (crc & 1) ? (crc >> 1) ^ 0xA001 : crc >> 1;
}
return crc;
}CRC8 の計算と主な種類
CRC8 は 1 バイトの CRC で、センサーの測定値や短いコマンドの誤り検出に使われます。上の計算機でアルゴリズムを CRC-8 系に切り替えると計算できます。メーカーごとに生成多項式と初期値が異なるため、データシートの値と下の表を照らし合わせてください。
| 名称 | 生成多項式 | 初期値 | 反転 | 出力 XOR | チェック値 | 主な用途 |
|---|---|---|---|---|---|---|
| CRC-8/SAE-J1850 | 1D | FF | なし | FF | 4B | 車載(SAE J1850、AUTOSAR E2E) |
| CRC-8/AUTOSAR | 2F | FF | なし | FF | DF | AUTOSAR E2E プロファイル 2 |
| CRC-8/NRSC-5 | 31 | FF | なし | 00 | F7 | Sensirion SHT3x などのセンサー |
| CRC-8/ROHC | 07 | FF | あり | 00 | D0 | ヘッダー圧縮(ROHC) |
Sensirion 製センサーのデータシートにあるテストデータ BE EF(16進数)を CRC-8/NRSC-5 で計算すると 0x92 になります。
関連ツール(英語)
- CRC16 計算(CRC16 Calculator):CCITT、XMODEM、MODBUS など 16 ビットの全方式を一覧で比較。
- CRC8 計算(CRC8 Calculator):8 ビットの全方式とサンプルコード。
- CRC64 計算(CRC64 Calculator):CRC-64/XZ、ECMA-182、NVME。
- Modbus CRC 計算:Modbus RTU フレームの CRC 付加と検証。
- チェックサム計算(Checksum Calculator):サム、XOR、LRC、Adler-32、MD5、SHA-256 をまとめて計算。
- ファイルの CRC32・ハッシュ値計算:ファイルの CRC32、MD5、SHA-256 を確認。
- CRC32 の計算方法(解説):割り算の手順とテーブル方式の実装。
よくある質問
CRC32 の計算で標準的に使われるパラメータは?
生成多項式 0x04C11DB7、初期値 0xFFFFFFFF、入力・出力ともビット反転あり、出力 XOR 0xFFFFFFFF です。ZIP、gzip、PNG、イーサネット、zlib で使われている CRC-32 で、文字列「123456789」の計算結果は 0xCBF43926 になります。
自分のプログラムと計算結果が一致しません。なぜですか?
原因の多くは次のいずれかです。①CRC の種類が違う(CRC-32 と CRC-32C、CRC-16/CCITT-FALSE と XMODEM など)。②入力バイト列が違う(文字コードが UTF-8 か Shift_JIS か、末尾に改行があるか、16進数をテキストとして入力していないか)。③初期値や出力 XOR の設定漏れ。④結果のバイト順(エンディアン)が逆。同じデータをこのページに入力し、「すべての CRC アルゴリズムの計算結果」の表で一致する行を探すと、どの方式かを特定できます。
16進数のデータ(バイナリ)の CRC を計算できますか?
できます。入力を「16進数」に切り替え、「01 03 00 0A」「0x01,0x03」「0103000A」のような形式で貼り付けてください。「テキスト」のままだと、文字として UTF-8 でエンコードされた結果に対して計算されます。
CRC16 の計算にはどれを選べばよいですか?
プロトコルによって異なります。Modbus RTU は CRC-16/MODBUS、XMODEM や SD カードは CRC-16/XMODEM、「CRC-CCITT」と書かれたライブラリやデータシートの多くは CRC-16/CCITT-FALSE、HDLC や PPP は CRC-16/X-25 です。不明な場合は、正しい CRC が分かっているデータを入力して表から一致するものを探してください。
チェックサムと CRC は何が違いますか?
チェックサムは誤り検出用の値全般を指す言葉で、単純な加算(サム)や XOR も含まれます。CRC はその一種で、データを生成多項式で割った余りを使います。単純な加算では検出できないバイトの入れ替わりやバースト誤りも検出できるため、通信やファイル形式で広く使われています。
入力したデータはサーバーに送信されますか?
送信されません。計算はすべてブラウザ上の JavaScript で行われ、テキストもファイルも端末の外に出ることはありません。