¿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.
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.
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)$$
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.