Origen y otros usos
Los códigos Reed-Solomon los describieron Irving S. Reed y Gustave Solomon en 1960. Trabajan con símbolos enteros, normalmente bytes, y no con bits sueltos, lo que los hace buenos para tratar ráfagas de daño como un arañazo o una mancha.
La misma familia de códigos protege los datos de los CD, los DVD y los discos Blu-ray, algunos enlaces de televisión digital y de satélite, y otros códigos 2D como Data Matrix ECC 200, el código Aztec y PDF417.
Cómo los usan los códigos QR
Un código QR trata cada palabra de código de 8 bits como un elemento del cuerpo finito GF(256), construido con el polinomio primitivo x^8 + x^4 + x^3 + x^2 + 1 (hexadecimal 0x11D). Las palabras de código de datos se dividen por un polinomio generador, y el resto pasa a ser las palabras de código de corrección de errores que se les añaden.
Los códigos mayores dividen sus datos en varios bloques, cada uno con sus propias palabras de código de corrección de errores. Después, los bloques se intercalan al colocar las palabras de código en la cuadrícula, de modo que una sola zona dañada se reparte entre muchos bloques en lugar de desbordar uno.
Cuánto puede arreglar
Con n palabras de código de corrección de errores en un bloque, un decodificador puede corregir hasta n/2 palabras de código cuya posición se desconoce, o hasta n palabras de código cuya posición se conoce, llamadas borrados. Los casos mixtos siguen la regla de que cada error cuenta doble y cada borrado cuenta una vez.
Por eso un código con una zona limpia y plana tapada por un logo puede seguir escaneándose: un lector inteligente puede tratar la región tapada como borrados, mientras que el daño aleatorio es más difícil de arreglar porque el decodificador primero tiene que encontrarlo.
- Errores desconocidos: hasta la mitad del número de palabras de código de corrección
- Borrados (posiciones conocidas): hasta el número de palabras de código de corrección
- Cuerpo: GF(256), polinomio 0x11D
- Los bloques se intercalan para repartir el daño en ráfaga