Conectar vía MCP →

Ingresar cálculo

Fórmula

Publicidad

Resultados

Checksum CRC (hex)
0x29B1
16-bit checksum
Valor decimal 10.673
Ancho en bits 16 bits
Bytes procesados 9

¿Qué es un checksum CRC?

La comprobación de redundancia cíclica (CRC, por sus siglas en inglés Cyclic Redundancy Check) es un código de detección de errores muy utilizado en redes, almacenamiento y formatos de archivo (Ethernet, ZIP, PNG, Modbus, USB y muchos más). Trata tus datos como un número binario muy largo y lo divide entre un polinomio generador fijo mediante aritmética binaria sin acarreo (en GF(2), donde la suma y la resta equivalen a un XOR). El resto de esa división es el CRC. Si cambia aunque sea un solo bit del mensaje, el resto casi siempre cambia también, y eso es justo lo que hace que los CRC sean tan buenos detectando errores de transmisión y de almacenamiento.

Diagrama de bloques de un mensaje dividido en datos más un campo de suma de comprobación CRC añadido
Un CRC añade un breve valor de verificación a los datos para poder detectar errores.

Cómo usar esta calculadora

Escribe cualquier texto ASCII en el cuadro de entrada, elige la variante de CRC que necesites y consulta el resultado. La herramienta muestra el checksum tanto en hexadecimal como en decimal, junto con el ancho en bits y el número de bytes procesados. Se admiten tres variantes habituales:

CRC-8: polinomio \(\mathtt{0x07}\), valor inicial \(\mathtt{0x00}\).
CRC-16/CCITT-FALSE: polinomio \(\mathtt{0x1021}\), valor inicial \(\mathtt{0xFFFF}\), sin reflexión.
CRC-32 (IEEE 802.3): polinomio reflejado \(\mathtt{0xEDB88320}\), inicial \(\mathtt{0xFFFFFFFF}\), XOR final \(\mathtt{0xFFFFFFFF}\). Es la variante que usan ZIP, gzip y Ethernet.

$$\text{CRC}_{8} = \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}(\text{crc}, b) \quad \left\{ \begin{aligned} \mathrm{init} &= \mathtt{0x00} \\ \text{poly} &= \mathtt{0x07} \\ \text{width} &= 8 \text{ bits, MSB-first} \end{aligned} \right.$$$$\text{CRC} = \mathrm{XorOut} \oplus \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}_{\text{poly}}(\text{crc}, b) \quad \left\{ \begin{aligned} \text{poly} &= \mathtt{0x1021} \\ \mathrm{init} &= \mathtt{0xFFFF} \\ \mathrm{XorOut} &= \mathtt{0x0000} \\ \text{width} &= 16 \text{ bits (MSB-first, no reflection)} \end{aligned} \right.$$$$\text{CRC}_{32} = \mathtt{0xFFFFFFFF} \oplus \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}(\text{crc}, b) \quad \left\{ \begin{aligned} \mathrm{init} &= \mathtt{0xFFFFFFFF} \\ \text{poly} &= \mathtt{0xEDB88320}\ (\text{reflected}) \\ \text{width} &= 32 \text{ bits, LSB-first} \end{aligned} \right.$$

La fórmula al detalle

En el plano conceptual, el mensaje \(M(x)\) se multiplica por \(x^n\) (donde \(n\) es el grado del generador) y se divide entre \(G(x)\). En la práctica usamos un registro que vamos desplazando bit a bit, aplicando un XOR con el polinomio cada vez que el bit más significativo es 1. Las variantes reflejadas (como CRC-32) procesan los bits empezando por el menos significativo y desplazan hacia la derecha en lugar de hacia la izquierda.

$$\text{step}: \text{crc} \leftarrow \big(\text{crc} \ll 1\big) \oplus (\text{MSB}?\,\text{poly}:0)$$$$\text{step}: \text{crc} \leftarrow \big(\text{crc} \gg 1\big) \oplus (\text{LSB}?\,\text{poly}:0)$$
División larga de polinomios de los bits del mensaje por el polinomio generador sobre GF(2) usando pasos XOR
El CRC es el resto de la división polinómica binaria (XOR) del mensaje por el generador \(G(x)\).

Ejemplo resuelto

Para la cadena de comprobación clásica 123456789: CRC-16/CCITT-FALSE devuelve 0x29B1 (10673 en decimal) y CRC-32/IEEE devuelve 0xCBF43926 (3421780262 en decimal). Estos son los valores «check» estándar publicados en los catálogos de referencia de CRC, así que puedes contrastar cualquier implementación con ellos.

Preguntas frecuentes

¿Por qué mi resultado no coincide con el de otra herramienta? Las variantes de CRC se diferencian en el polinomio, el valor inicial, la reflexión de bits y el XOR final. Asegúrate de comparar exactamente la misma variante.

¿El CRC es un hash seguro? No. El CRC detecta errores accidentales, pero es trivial falsificarlo de forma intencionada. Para fines de seguridad usa SHA-256 o algo similar.

¿Qué codificación se utiliza? Cada carácter se toma como su valor de byte ASCII/Latin-1 de 8 bits antes de calcular el CRC.

Última actualización: