CRC Calculator

CRC 計算ツール(CRC8・CRC16・CRC32)

テキスト、16進数、Base64、ファイルから CRC チェックサムを計算します。CRC-8 から CRC-64 まで 100 種類の標準アルゴリズムを選べるほか、生成多項式・初期値・ビット反転・出力 XOR を自由に指定できます。入力と同時に結果が更新されます。

9 バイト
パラメータ

計算結果CRC-32

0xCBF43926
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 アルゴリズムの計算結果

行をクリックすると、そのパラメータを計算機に読み込みます。

アルゴリズム結果PolyInitRefInRefOutXorOutCheck用途
0x40x30x0falsefalse0x70x4GSM mobile networks
0x60x30x7truetrue0x00x6Robust Header Compression
0x70x30x0truetrue0x00x7ITU-T G.704 (E1 framing)
0x190x050x1Ftruetrue0x1F0x19USB token packets
0x000x090x09falsefalse0x000x00EPC Gen2 RFID
0x070x150x00truetrue0x000x07ITU-T G.704
0x060x030x00truetrue0x000x06ITU-T G.704
0x750x090x00falsefalse0x000x75SD / MMC card commands
0xF40x070x00falsefalse0x000xF4SMBus PEC, I2C sensors
0xA10x310x00truetrue0x000xA1Dallas/Maxim 1-Wire (DS18B20)
0xD00x070xFFtruetrue0x000xD0Robust Header Compression
0xA10x070x00falsefalse0x550xA1ATM HEC (ITU-T I.432.1)
0x4B0x1D0xFFfalsefalse0xFF0x4BAutomotive SAE J1850, AUTOSAR E2E
0xDF0x2F0xFFfalsefalse0xFF0xDFAUTOSAR E2E profiles
0xDA0x9B0xFFfalsefalse0x000xDACDMA2000 mobile
0x150x390x00truetrue0x000x15Data Radio Channel
0xBC0xD50x00falsefalse0x000xBCDVB-S2 baseband header
0x970x1D0xFFtruetrue0x000x97AES3 / EBU digital audio
0x7E0x1D0xFDfalsefalse0x000x7EPhilips I-CODE RFID
0x250x9B0x00truetrue0x000x25WCDMA mobile
0x260xA70x00truetrue0x000x26Bluetooth HEC
0xEA0x9B0x00falsefalse0x000xEALTE (3GPP TS 36.212)
0xF70x310xFFfalsefalse0x000xF7HD Radio, Sensirion SHT sensors
0x3E0x2F0x00falsefalse0x000x3EopenSAFETY
0x370x1D0x00falsefalse0x000x37GSM
0x940x490x00falsefalse0xFF0x94GSM
0xB40x1D0xFFfalsefalse0x000xB4HITAG RFID
0x990x1D0xC7falsefalse0x000x99MIFARE application directory
0x1990x2330x000falsefalse0x0000x199ATM AAL 3/4
0x5A30x3850x01Afalsefalse0x0000x5A3FlexRay header
0xF5B0x80F0x000falsefalse0x0000xF5BDECT cordless
0xDAF0x80F0x000falsetrue0x0000xDAF3GPP UMTS
0xD4D0xF130xFFFfalsefalse0x0000xD4DCDMA2000 mobile
0x04FA0x1CF50x0000falsefalse0x00000x04FABBC time signal
0x082D0x08050x0000truetrue0x00000x082DData Radio Channel
0x059E0x45990x0000falsefalse0x00000x059EClassical CAN bus frames
0x25660x68150x0000falsefalse0x00010x2566MPT 1327 trunked radio
0xBB3D0x80050x0000truetrue0x00000xBB3DARC, LHA, legacy disk formats
0x4B370x80050xFFFFtruetrue0x00000x4B37Modbus RTU frames
0xB4C80x80050xFFFFtruetrue0xFFFF0xB4C8USB data packets
0x44C20x80050x0000truetrue0xFFFF0x44C2Maxim 1-Wire / iButton
0x29B10x10210xFFFFfalsefalse0x00000x29B1Most "CCITT" implementations, AUTOSAR
0x31C30x10210x0000falsefalse0x00000x31C3XMODEM, ZMODEM, SD card data
0x21890x10210x0000truetrue0x00000x2189Kermit, Bluetooth, V.41
0x906E0x10210xFFFFtruetrue0xFFFF0x906EX.25, HDLC, PPP, ISO 14443-B
0x6F910x10210xFFFFtruetrue0x00000x6F91Microchip MCRF4xx, MAVLink
0xD64E0x10210xFFFFfalsefalse0xFFFF0xD64EGrundfos GENIbus, EPC RFID
0xE5CC0x10210x1D0Ffalsefalse0x00000xE5CCFujitsu SPI flash
0xCE3C0x10210x0000falsefalse0xFFFF0xCE3CGSM
0x26B10x10210x89ECtruetrue0x00000x26B1TI TMS37157 transponders
0x63D00x10210xB2AAtruetrue0x00000x63D0Riello UPS protocol
0xBF050x10210xC6C6truetrue0x00000xBF05ISO 14443-A (MIFARE, NFC-A)
0xEA820x3D650x0000truetrue0xFFFF0xEA82DNP3 (SCADA)
0xC2B70x3D650x0000falsefalse0xFFFF0xC2B7Wireless M-Bus metering
0xFEE80x80050x0000falsefalse0x00000xFEE8Verifone, UMTS
0xAEE70x80050xFFFFfalsefalse0x00000xAEE7RPM package format
0x9ECF0x80050x800Dfalsefalse0x00000x9ECFELV DDS-110 function generator
0x007E0x05890x0000falsefalse0x00010x007EDECT cordless
0x007F0x05890x0000falsefalse0x00000x007FDECT cordless
0xD0DB0x8BB70x0000falsefalse0x00000xD0DBSCSI data integrity field
0x0FB30xA0970x0000falsefalse0x00000x0FB3Teledisk disk images
0x4C060xC8670xFFFFfalsefalse0x00000x4C06CDMA2000 mobile
0xA8190x1DCF0xFFFFfalsefalse0xFFFF0xA819PROFIBUS PA
0x5D380x59350x0000falsefalse0x00000x5D38openSAFETY
0x20FE0x755B0x0000falsefalse0x00000x20FEopenSAFETY
0xBDF40x6F630x0000falsefalse0x00000xBDF4LoJack vehicle tracking
0xA0660x080B0xFFFFtruetrue0x00000xA066HD Radio
0x772B0x59350xFFFFfalsefalse0x00000x772BM17 digital radio
0x04F030x1685B0x00000falsefalse0x000000x04F03CAN FD frames up to 16 bytes
0x0ED8410x1028990x000000falsefalse0x0000000x0ED841CAN FD frames over 16 bytes
0x21CF020x864CFB0xB704CEfalsefalse0x0000000x21CF02OpenPGP ASCII armor
0xC25A560x00065B0x555555truetrue0x0000000xC25A56Bluetooth Low Energy packets
0xCDE7030x864CFB0x000000falsefalse0x0000000xCDE703LTE, RTCM / GNSS (CRC-24Q)
0x23EF520x8000630x000000falsefalse0x0000000x23EF52LTE code blocks
0x7979BD0x5D6DCB0xFEDCBAfalsefalse0x0000000x7979BDFlexRay channel A
0x1F23B80x5D6DCB0xABCDEFfalsefalse0x0000000x1F23B8FlexRay channel B
0xB4F3E60x328B630xFFFFFFfalsefalse0xFFFFFF0xB4F3E6Interlaken protocol
0x200FA50x8000630xFFFFFFfalsefalse0xFFFFFF0x200FA5OS-9 module CRC
0x04C34ABF0x2030B9C70x3FFFFFFFfalsefalse0x3FFFFFFF0x04C34ABFCDMA (TIA-95)
0x0CE9E46C0x04C11DB70x7FFFFFFFfalsefalse0x7FFFFFFF0x0CE9E46CPhilips CD-i
0xCBF439260x04C11DB70xFFFFFFFFtruetrue0xFFFFFFFF0xCBF43926Ethernet, ZIP, gzip, PNG, zlib
0xE30692830x1EDC6F410xFFFFFFFFtruetrue0xFFFFFFFF0xE3069283iSCSI, SCTP, ext4, Btrfs, SSE4.2
0xFC8919180x04C11DB70xFFFFFFFFfalsefalse0xFFFFFFFF0xFC891918bzip2, ATM AAL5
0x0376E6E70x04C11DB70xFFFFFFFFfalsefalse0x000000000x0376E6E7MPEG-2 transport stream, STM32 hardware CRC
0x765E76800x04C11DB70x00000000falsefalse0xFFFFFFFF0x765E7680POSIX cksum (before the length is appended)
0x340BC6D90x04C11DB70xFFFFFFFFtruetrue0x000000000x340BC6D9Altera JAM, bitwise NOT of CRC-32
0x873155760xA833982B0xFFFFFFFFtruetrue0xFFFFFFFF0x87315576Base91 encoding
0x3010BF7F0x814141AB0x00000000falsefalse0x000000000x3010BF7FAviation data (AIXM)
0xBD0BE3380x000000AF0x00000000falsefalse0x000000000xBD0BE338XFER
0x1697D06A0xF4ACFB130xFFFFFFFFtruetrue0xFFFFFFFF0x1697D06AAUTOSAR E2E profile 4
0x6EC2EDC40x8001801B0x00000000truetrue0x000000000x6EC2EDC4CD-ROM sector error detection
0xD2C22F510x741B8CD70xFFFFFFFFtruetrue0x000000000xD2C22F51Multiscale Electrophysiology Format
0xD4164FC6460x00048200090x0000000000falsefalse0xFFFFFFFFFF0xD4164FC646GSM control channel
0x6C40DF5F0B4973470x42F0E1EBA9EA36930x0000000000000000falsefalse0x00000000000000000x6C40DF5F0B497347DLT-1 tape cartridges
0x995DC9BBDF1939FA0x42F0E1EBA9EA36930xFFFFFFFFFFFFFFFFtruetrue0xFFFFFFFFFFFFFFFF0x995DC9BBDF1939FAxz / LZMA2 containers
0xB90956C775A410010x000000000000001B0xFFFFFFFFFFFFFFFFtruetrue0xFFFFFFFFFFFFFFFF0xB90956C775A41001ISO 3309, Go hash/crc64 ISO table
0x62EC59E3F1A4F00A0x42F0E1EBA9EA36930xFFFFFFFFFFFFFFFFfalsefalse0xFFFFFFFFFFFFFFFF0x62EC59E3F1A4F00AWolfgang Ehrhardt library
0x75D4B74F024ECEEA0x259C84CBA64263490xFFFFFFFFFFFFFFFFtruetrue0x00000000000000000x75D4B74F024ECEEAMicrosoft MS-FCIADS
0xE9C6D914C4B8D9CA0xAD93D23594C935A90x0000000000000000truetrue0x00000000000000000xE9C6D914C4B8D9CARedis RDB files
0xAE8B14860A7998880xAD93D23594C936590xFFFFFFFFFFFFFFFFtruetrue0xFFFFFFFFFFFFFFFF0xAE8B14860A799888NVMe, Amazon S3 checksums

CRC の計算方法

  1. 入力形式を選ぶ。文字列なら「テキスト」、通信フレームなどのバイト列なら「16進数」、ファイルの CRC を求めるなら「ファイル」を選びます。
  2. アルゴリズムを選ぶ。初期状態は ZIP や PNG で使われる標準の CRC-32 です。CRC16 や CRC8 を計算する場合は一覧から選ぶか、パラメータを直接書き換えます。
  3. 結果を確認する。計算結果は 16進数・10進数・2進数と、ビッグエンディアン/リトルエンディアンのバイト列で表示され、そのままコピーできます。

動作確認用の値:標準の CRC-32 で 123456789 は 0xCBF43926、hello は 0x3610A686、日本語(UTF-8)は 0xA80B52E5 になります。

よく使われる CRC の種類とパラメータ

「CRC16」「CRC32」は単一の方式ではなく、生成多項式や初期値が異なる複数の方式の総称です。代表的なものを下の表にまとめます。チェック値は 123456789 を計算した結果です。

名称生成多項式初期値反転出力 XORチェック値主な用途
CRC-80700なし00F4SMBus、I2C センサー
CRC-8/MAXIM3100あり00A11-Wire(DS18B20)
CRC-16/CCITT-FALSE1021FFFFなし000029B1一般的な「CRC-CCITT」
CRC-16/XMODEM10210000なし000031C3XMODEM、SD カード
CRC-16/MODBUS8005FFFFあり00004B37Modbus RTU
CRC-16/ARC80050000あり0000BB3DLHA、IBM CRC-16
CRC-3204C11DB7FFFFFFFFありFFFFFFFFCBF43926ZIP、PNG、イーサネット
CRC-32C1EDC6F41FFFFFFFFありFFFFFFFFE3069283iSCSI、ext4、SSE4.2
CRC-32/MPEG-204C11DB7FFFFFFFFなし000000000376E6E7MPEG-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-J18501DFFなしFF4B車載(SAE J1850、AUTOSAR E2E)
CRC-8/AUTOSAR2FFFなしFFDFAUTOSAR E2E プロファイル 2
CRC-8/NRSC-531FFなし00F7Sensirion SHT3x などのセンサー
CRC-8/ROHC07FFあり00D0ヘッダー圧縮(ROHC)

Sensirion 製センサーのデータシートにあるテストデータ BE EF(16進数)を CRC-8/NRSC-5 で計算すると 0x92 になります。

関連ツール(英語)

よくある質問

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 で行われ、テキストもファイルも端末の外に出ることはありません。