Un nombre CRC no basta
CRC-16 describe la anchura del registro, pero no identifica una variante
completa. El polinomio, el valor inicial, la reflexión de bits y el XOR final
también cambian el resultado. Por ejemplo, el texto 123456789 produce
0xBB3D con CRC-16/ARC y 0x29B1 con CRC-16/IBM-3740.
La calculadora no intenta adivinar el modelo. Selecciona el preset que indique tu protocolo o introduce exactamente sus parámetros. La tarjeta situada encima de la entrada muestra siempre el contrato que se aplicará.
Si necesitas decidir qué contrato debes copiar de una especificación, consulta qué es un CRC y cómo elegir sus parámetros.
Vector verificable «123456789»
La cadena ASCII 123456789 ocupa nueve bytes y sirve para comprobar que una
implementación aplica los parámetros esperados. Estos son los resultados de
los presets incluidos:
| Modelo | Resultado |
|---|---|
| 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 |
Puedes cargar ese vector desde el botón de ejemplo. Escribirlo como texto o
como los bytes 31 32 33 34 35 36 37 38 39 debe dar el mismo resultado.
Ejemplo Modbus RTU y orden de bytes
Los bytes 02 07 producen 0x1241 con CRC-16/MODBUS. La
especificación de Modbus Serial Line
indica que el byte menos significativo se transmite primero. Por tanto:
Valor numérico: 0x1241
MSB primero: 12 41
LSB primero: 41 12
Bytes en el frame: 41 12
La calculadora muestra ambas representaciones para evitar intercambiarlas. El protocolo, no la propia operación CRC, decide cuál se coloca en el frame.
Qué significa cada parámetro
Anchura
Es el número de bits del registro y del resultado. Un CRC de 16 bits siempre se muestra con cuatro cifras hexadecimales; uno de 32 bits, con ocho.
Polinomio
Representa el divisor de la aritmética polinómica. La interfaz usa la forma
habitual que omite el término principal x^width. Así, 0x1021 en 16 bits
representa:
x^16 + x^12 + x^5 + 1
Compartir el polinomio no hace equivalentes dos modelos. CRC-16/IBM-3740,
XMODEM e IBM-SDLC usan 0x1021, pero difieren en inicio o reflexión.
Valor inicial (init)
Es el contenido del registro antes de leer el primer byte. Los valores habituales a cero y a todos unos no son intercambiables.
Reflexión (refin y refout)
refin determina el orden en que se incorporan los bits de cada byte.
refout determina la orientación del registro antes del XOR final. No debe
confundirse esta reflexión de bits con invertir el orden de los bytes del
resultado.
XOR final (xorout)
Es la máscara que se aplica al registro al terminar. Un XOR de todos unos complementa el valor dentro de la anchura elegida.
Texto UTF-8 frente a bytes hexadecimales
Un CRC se calcula sobre bytes, no sobre caracteres abstractos. En modo texto, la herramienta convierte la entrada a UTF-8 sin normalizarla. Esto tiene dos consecuencias importantes:
Aes el byte41y dará el mismo CRC en ambos modos.- Dos textos que se ven como
épueden usar los bytesC3 A9o65 CC 81; si la secuencia Unicode es distinta, el CRC también puede serlo.
Usa texto cuando el sistema receptor define UTF-8. Usa hexadecimal cuando ya
conoces el frame o buffer exacto. No escribas 02 07 como texto si quieres
procesar los bytes 0x02 y 0x07: en texto serían los caracteres 0, 2,
espacio, 0 y 7.
La entrada hexadecimal admite pares continuos o separados por espacios, dos
puntos, comas o guiones. También permite 0x delante de cada byte. Se rechaza
un último nibble incompleto para no inventar si faltaba un cero a la izquierda
o a la derecha.
CRC-32 no es CRC-32C
CRC-32/ISO-HDLC usa el polinomio 0x04C11DB7; CRC-32C usa el polinomio de
Castagnoli 0x1EDC6F41. Para 123456789 producen respectivamente
0xCBF43926 y 0xE3069283.
El RFC 1662 documenta métodos FCS de 16 y 32 bits para PPP. El RFC 9260 especifica CRC-32C para SCTP y describe su orden reflejado. Selecciona el modelo nombrado por tu formato o protocolo; el número de bits no basta.
CRC-8/SMBUS
El Packet Error Code de SMBus usa CRC-8 con el polinomio
x^8 + x^2 + x + 1, representado aquí como 0x07. La
especificación SMBus 3.3.1
aclara además qué bytes de una transacción forman parte del PEC. Esta
calculadora procesa únicamente los bytes que introduzcas: no añade por su
cuenta direcciones, comandos ni bits de control.
Cómo se calcula
La lógica genera una tabla de 256 entradas para los parámetros activos. Después
actualiza un registro BigInt por cada byte, aplica la reflexión de salida
cuando difiere de la entrada, ejecuta el XOR final y enmascara el resultado a
la anchura seleccionada.
El resultado es equivalente a la división polinómica bit a bit, pero evita repetir ocho iteraciones por byte. La tabla se genera en esta pestaña y no se descarga de ningún servicio.
CRC detecta errores; no autentica
Un CRC está diseñado para detectar determinados cambios accidentales en una secuencia. No incorpora una clave secreta y una persona que modifique los datos puede volver a calcularlo. No lo uses como prueba de autoría, autenticación ni protección frente a manipulación deliberada.
Si necesitas identificar contenido con un resumen criptográfico, utiliza el generador SHA-256. Incluso un hash sin clave no autentica por sí solo al remitente; para eso hace falta un mecanismo como un MAC o una firma dentro del protocolo adecuado.
Errores frecuentes
- Elegir «CRC-16» sin confirmar el modelo completo.
- Copiar un polinomio reflejado como
0xA001en un campo que espera la forma normal0x8005. - Calcular sobre la representación textual de un hexadecimal en vez de sobre sus bytes.
- Añadir al cálculo bytes que el protocolo excluye, o dejar fuera cabeceras que sí incluye.
- Invertir los bytes cuando el protocolo espera el valor más significativo primero.
- Comparar CRC-32 con CRC-32C como si fueran el mismo algoritmo.
- Usar CRC para proteger datos frente a un atacante.
Parámetros personalizados y límites
El modo personalizado admite anchuras enteras entre 8 y 64 bits. El polinomio,
el valor inicial y el XOR final se escriben en hexadecimal, con 0x opcional,
y deben caber en la anchura. El polinomio no puede ser cero.
El texto se limita a 200.000 caracteres y 200.000 bytes UTF-8. La entrada hexadecimal se limita a 200.000 bytes. Esta versión no carga archivos ni calcula por streaming; divide entradas mayores o utiliza una herramienta especializada que procese el archivo de forma incremental.
Tampoco intenta recuperar parámetros desconocidos a partir de ejemplos, generar código C, validar un frame completo ni insertar automáticamente el resultado.
Preguntas frecuentes
¿Qué preset debo elegir?
El que especifique tu protocolo, dispositivo o formato, comparando todos sus parámetros. Si la documentación solo dice «CRC-16», busca polinomio, inicio, reflexiones y XOR final antes de confiar en el resultado.
¿CCITT-FALSE está disponible?
Sí. En esta herramienta aparece con el nombre CRC-16/IBM-3740 y muestra
CRC-16/CCITT-FALSE como alias. Sus parámetros son poly=0x1021,
init=0xFFFF, sin reflexión y xorout=0x0000.
¿Por qué Modbus muestra dos órdenes de bytes?
Porque el valor 0x1241 puede escribirse como 12 41 o 41 12. Modbus RTU
transmite primero el byte menos significativo, pero otros protocolos pueden
definir otro orden.
¿Puedo calcular el CRC de un archivo?
No en esta primera versión. El selector trabaja con texto y bytes pegados. La carga de archivos necesita cálculo incremental, límites y pruebas propias para no bloquear la pestaña.
¿Se guardan o envían los datos?
No. La entrada, los parámetros y el resultado permanecen en esta pestaña. No se usan backend, almacenamiento ni peticiones de procesamiento; tampoco se envían esos datos a la medición opcional.