Tool

Online CRC calculator for text and bytes

Calculates known or custom CRC variants on text and bytes without sending the data.

Your data is processed locally in your browser and is not sent to our servers.

CRC calculation data

Active model

CRC-32/ISO-HDLC

Widely used reflected 32-bit CRC model.

Width
32 bits
Polynomial
0x04C11DB7
Initial value
0xFFFFFFFF
Refin / refout
Yes / yes
XOR final
0xFFFFFFFF
Check
0xCBF43926

Also known as: CRC-32.

Text is converted exactly to UTF-8 bytes without normalization. Limit: 200,000 characters and 200,000 bytes.

Enter UTF-8 text or exact hexadecimal bytes in the calculator above, choose the CRC model required by your protocol, and calculate the checksum. The result includes the hexadecimal and decimal values, both byte orders, the number of input bytes, and every parameter used.

A label such as CRC-16 is not a complete model. The polynomial, initial value, input and output reflection, and final XOR can all change the result. For example, 123456789 produces 0xBB3D with CRC-16/ARC but 0x29B1 with CRC-16/IBM-3740.

How to use the CRC calculator

  1. Select the exact preset named by the protocol or specification.
  2. Choose UTF-8 text for text or hexadecimal bytes for a known frame.
  3. Enter the data and press Calculate CRC or Ctrl/Command + Enter.
  4. Compare the result and the active parameters with the other implementation.
  5. Use the byte order required by the protocol; byte order does not change the numeric CRC value.

If the specification does not name a preset, collect its width, poly, init, refin, refout, and xorout values before using custom mode. The guide to choosing CRC parameters explains how to read that contract.

Common CRC preset table

The calculator includes these nine models. The polynomial is written without the leading x^width term.

Model Width Polynomial Initial value RefIn / RefOut Final XOR
CRC-8/SMBUS 8 0x07 0x00 no / no 0x00
CRC-16/ARC 16 0x8005 0x0000 yes / yes 0x0000
CRC-16/IBM-3740 16 0x1021 0xFFFF no / no 0x0000
CRC-16/XMODEM 16 0x1021 0x0000 no / no 0x0000
CRC-16/MODBUS 16 0x8005 0xFFFF yes / yes 0x0000
CRC-16/IBM-SDLC 16 0x1021 0xFFFF yes / yes 0xFFFF
CRC-32/ISO-HDLC 32 0x04C11DB7 0xFFFFFFFF yes / yes 0xFFFFFFFF
CRC-32C (Castagnoli) 32 0x1EDC6F41 0xFFFFFFFF yes / yes 0xFFFFFFFF
CRC-64/ECMA-182 64 0x42F0E1EBA9EA3693 0x0000000000000000 no / no 0x0000000000000000

CRC-16/IBM-3740 is also widely called CRC-16/CCITT-FALSE. CRC-16/IBM-SDLC is also known as CRC-16/X-25. The calculator shows these aliases with the active preset so that two names are not mistaken for two different configurations.

Known check values for 123456789

The ASCII string 123456789 is the standard quick check for many CRC models. Its nine bytes produce these results with the included presets:

Model Result
CRC-8/SMBUS 0xF4
CRC-16/ARC 0xBB3D
CRC-16/IBM-3740 0x29B1
CRC-16/XMODEM 0x31C3
CRC-16/MODBUS 0x4B37
CRC-16/IBM-SDLC 0x906E
CRC-32/ISO-HDLC 0xCBF43926
CRC-32C (Castagnoli) 0xE3069283
CRC-64/ECMA-182 0x6C40DF5F0B497347

Use Load test vector to reproduce the table. Text 123456789 and bytes 31 32 33 34 35 36 37 38 39 must produce the same value because their input bytes are identical.

Modbus CRC example and byte order

With the CRC-16/MODBUS preset, input bytes 02 07 produce the numeric value 0x1241. Modbus RTU transmits the least significant byte first:

Numeric value:      0x1241
MSB first:          12 41
LSB first:          41 12
Bytes in the frame: 41 12

The calculator displays both byte orders to prevent a common integration error. The protocol decides which representation belongs in the frame; the CRC calculation itself still has one numeric result. The Modbus Serial Line specification documents its transmission order.

What the CRC parameters mean

Width

width is the number of bits in the register and result. A 16-bit result is shown with four hexadecimal digits, a 32-bit result with eight, and a 64-bit result with sixteen. Leading zeros are significant when serializing the value.

Polynomial

poly represents the divisor used in polynomial arithmetic. This calculator uses the common notation that omits the leading x^width term. For a 16-bit model, 0x1021 represents:

x^16 + x^12 + x^5 + 1

Do not paste a reflected implementation constant such as 0xA001 into a field that expects the normal 0x8005 representation unless the documentation uses the same convention.

Initial value and final XOR

init is the register value before the first byte is processed. xorout is applied after the last byte and any required output reflection. Zero and all ones are both common choices, but they are not interchangeable.

Input and output reflection

refin controls the bit order used for each input byte. refout controls the orientation of the register before the final XOR. Bit reflection is different from reversing the output bytes.

UTF-8 text versus hexadecimal bytes

A CRC operates on bytes, not abstract characters. In text mode, this tool encodes the input as UTF-8 without Unicode normalization.

  • A becomes byte 41, so text A and hex 41 produce the same CRC.
  • A displayed é may use bytes C3 A9 or the decomposed sequence 65 CC 81; different bytes can produce different CRC values.
  • Text 02 07 means the characters 0, 2, space, 0, 7. Use hex mode to process the two bytes 0x02 and 0x07.

Hex input accepts continuous pairs or bytes separated by spaces, colons, commas, or hyphens. Each separated byte may use a 0x prefix. An incomplete final nibble is rejected because the tool cannot know where a missing zero belongs.

CRC-32 and CRC-32C are different

CRC-32/ISO-HDLC uses polynomial 0x04C11DB7. CRC-32C uses the Castagnoli polynomial 0x1EDC6F41. For 123456789, they produce 0xCBF43926 and 0xE3069283 respectively.

RFC 1662 documents 16-bit and 32-bit FCS methods for PPP. RFC 9260 specifies CRC-32C for SCTP. Choose the model required by the format or protocol; the register width alone is not enough.

Does this generate a CRC lookup table?

The calculator generates a 256-entry lookup table in this tab for the active model and uses it to process each byte. This version does not display or export that implementation table or generate C source. If you create a table for firmware, use the exact parameters shown above and confirm the generated code against the matching 123456789 check value before using it.

CRC detects errors; it does not authenticate data

A CRC is designed to detect certain accidental changes. It has no secret key, so anyone who changes the data can calculate a new CRC. Do not use a CRC as proof of authorship or protection against deliberate modification.

For a cryptographic digest, use the SHA-256 hash generator. A plain hash still does not authenticate a sender; that requires a suitable MAC or digital signature.

Custom parameters and limits

Custom mode supports integer widths from 8 to 64 bits. Enter the polynomial, initial value, and final XOR in hexadecimal, with an optional 0x prefix. Each value must fit the selected width, and the polynomial cannot be zero.

Text is limited to 200,000 characters and 200,000 UTF-8 bytes. Hex input is limited to 200,000 bytes. This version does not upload files, stream large inputs, infer unknown parameters, validate a complete protocol frame, insert a CRC into a message, or export generated source code.

Frequently asked questions

Which CRC preset should I use?

Use the one named by the protocol, device, or file format and compare every parameter. If the documentation only says CRC-16, find the polynomial, initial value, reflection settings, and final XOR before trusting the result.

Is CRC-16/CCITT-FALSE available?

Yes. Select CRC-16/IBM-3740. It uses poly=0x1021, init=0xFFFF, no input or output reflection, and xorout=0x0000.

Why does the Modbus result show two byte orders?

The numeric value 0x1241 can be serialized as 12 41 or 41 12. Modbus RTU uses least-significant byte first, while another protocol may require the opposite order.

Can I calculate a file CRC?

Not in this version. The calculator accepts pasted text and hexadecimal bytes. Large files need incremental processing and dedicated limits so the browser tab remains responsive.

Is my input saved or sent?

No. The input, parameters, and result stay in this tab. The calculation uses no backend or storage and makes no processing request. Aggregate page-view measurement is separate and never receives the content entered in the tool.

Reviewed on by Tools in a Tab.