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
- Select the exact preset named by the protocol or specification.
- Choose UTF-8 text for text or hexadecimal bytes for a known frame.
- Enter the data and press Calculate CRC or
Ctrl/Command + Enter. - Compare the result and the active parameters with the other implementation.
- 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.
Abecomes byte41, so textAand hex41produce the same CRC.- A displayed
émay use bytesC3 A9or the decomposed sequence65 CC 81; different bytes can produce different CRC values. - Text
02 07means the characters0,2, space,0,7. Use hex mode to process the two bytes0x02and0x07.
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.