El algoritmo de Verhoeff [ 1 ] es una suma de verificación para la detección de errores publicada por primera vez por el matemático holandés Jacobus Verhoeff en 1969. [ 2 ] [ 3 ] Fue el primer algoritmo de dígito de control decimal que detecta todos los errores de un solo dígito y todos los errores de transposición que involucran dos dígitos adyacentes, [ 4 ] lo cual en ese momento se pensaba imposible con un código de este tipo.
El método fue descubierto independientemente por H. Peter Gumm en 1985, esta vez incluyendo una demostración formal y una extensión a cualquier base. [ 5 ]
Objetivos
Verhoeff tenía el objetivo de encontrar un código decimal —uno en el que el dígito de control fuera un solo dígito decimal— que detectara todos los errores de un solo dígito y todas las transposiciones de dígitos adyacentes. En ese momento, las supuestas pruebas de la inexistencia [ 6 ] de estos códigos hicieron que los códigos de base 11 se popularizaran, por ejemplo, en el dígito de control del ISBN .
Sus objetivos también eran prácticos, y basó la evaluación de diferentes códigos en datos reales del sistema postal holandés, utilizando un sistema de puntos ponderados para distintos tipos de errores. El análisis desglosó los errores en varias categorías: primero, según la cantidad de dígitos erróneos; para aquellos con dos dígitos erróneos, hay transposiciones ( ab → ba ), gemelos ( aa → bb ), transposiciones con salto ( abc → cba ), fonéticas ( 1a → a0 ) y gemelos con salto ( aba → cbc ). Además, hay dígitos omitidos y añadidos. Aunque la frecuencia de algunos de estos tipos de errores puede ser pequeña, algunos códigos pueden ser inmunes a ellos, además de los objetivos principales de detectar todos los errores simples y transposiciones.
Los errores fonéticos, en particular, mostraron efectos lingüísticos, ya que en neerlandés los números se leen normalmente en pares; y además, aunque 50 suena parecido a 15 en neerlandés, 80 no suena como 18.
Tomando como ejemplo los números de seis dígitos, Verhoeff informó la siguiente clasificación de los errores:
Descripción
La idea general del algoritmo es representar cada uno de los dígitos (del 0 al 9) como elementos del grupo diedral D 5 . Es decir, mapear los dígitos a D 5 , manipularlos y luego volver a mapearlos a dígitos. Sea esta función m : [0, 9] → D 5 .
Sea a el n - ésimo dígito y sea k el número de dígitos .
Por ejemplo, dado el código 942, entonces k es 3 y a 3 = m (2) = r 2 .
Ahora definimos la permutación f : D 5 → D 5
Por ejemplo,Otro ejemplo esdesde.
Utilizando la notación multiplicativa para la operación de grupo de D 5 , el dígito de control es entonces simplemente un valor c tal que
c viene dada explícitamente por el inverso multiplicativo:
Por ejemplo, el dígito de control para 942 es 7. Para verificar esto, use la asignación a D 5 e insértela en el lado izquierdo de la ecuación anterior.
Para evaluar esta permutación rápidamente, utilice eso.
para conseguir eso
Esta es la misma reflexión que se multiplica iterativamente. Utilice el hecho de que las reflexiones son su propio inverso. [ 7 ]
En la práctica, el algoritmo se implementa utilizando tablas de búsqueda simples sin necesidad de comprender cómo generarlas a partir de la teoría de grupos y permutaciones subyacente. Esto se considera más propiamente una familia de algoritmos, ya que otras permutaciones también funcionan. Verhoeff señala que la permutación particular, dada anteriormente, es especial porque tiene la propiedad de detectar el 95,3 % de los errores fonéticos. [ 8 ]
Las ventajas del algoritmo radican en que detecta todos los errores de transliteración y transposición, y además la mayoría de los errores de doble transposición, doble transposición con salto y errores fonéticos.
La principal debilidad del algoritmo de Verhoeff radica en su complejidad. Los cálculos necesarios no pueden expresarse fácilmente mediante una fórmula como Z / 10 Z. Se requieren tablas de consulta para facilitar el cálculo. Un algoritmo similar es el de Damm , que presenta características parecidas.
Algoritmo basado en tablas
El algoritmo de Verhoeff se puede implementar utilizando tres tablas: una tabla de multiplicación d , una tabla inversa inv y una tabla de permutación p .
La primera tabla, d , se basa en la multiplicación en el grupo diedral D 5 . [ 7 ] y es simplemente la tabla de Cayley del grupo. Nótese que este grupo no es conmutativo , es decir, para algunos valores de j y k , d ( j , k ) ≠ d ( k , j ) .
La tabla inversa inv representa el inverso multiplicativo de un dígito, es decir, el valor que satisface d ( j , inv( j )) = 0 .
La tabla de permutaciones p aplica una permutación a cada dígito en función de su posición en el número. En realidad, se trata de una única permutación (1 5 8 9 4 2 7 0)(3 6) aplicada iterativamente; es decir, p ( i + j , n ) = p ( i , p ( j , n )) .
El cálculo de la suma de verificación de Verhoeff se realiza de la siguiente manera:
- Crea una matriz n a partir de los dígitos individuales del número, tomados de derecha a izquierda (el dígito más a la derecha es n 0 , etc.).
- Inicialice la suma de verificación c a cero.
- Para cada índice i del arreglo n , comenzando en cero, reemplace c con d ( c , p ( i mod 8, n i )) .
El número original es válido si y solo si c = 0 .
Para generar un dígito de control, agregue un 0, realice el cálculo: el dígito de control correcto es inv( c ).
Ejemplos
Usos
El algoritmo de Verhoeff se utiliza en una variedad de sistemas, entre ellos:
- Billetes de marco alemán [ 10 ]
- Números Aadhaar de la India [ 11 ]
- Operador del Sistema de Registro de Medidores de Irlanda [ 12 ]
- El diccionario de términos clínicos SNOMED [ 13 ]
Véase también
- Algoritmo de Luhn : fórmula de suma de verificación simple
- Algoritmo de Damm – Algoritmo del dígito de control
Referencias
- ^ Verhoeff, J. (1969). "Error al detectar códigos decimales (tramo 29)". Zeitschrift für Angewandte Mathematik und Mechanik . 51 (3). El Centro de Matemáticas, Ámsterdam: 240. Bibcode : 1971ZaMM...51..240N . doi : 10.1002/zamm.19710510323 .
- ↑ Kirtland, Joseph (2001). "5. Teoría de grupos y el esquema de dígitos de control de Verhoeff" . Números de identificación y esquemas de dígitos de control . Asociación Matemática de América. pág. 153. ISBN 0-88385-720-0.
- ↑ Salomon, David (2005). "§2.11 El método del dígito de control de Verhoeff" . Codificación para comunicaciones de datos e informáticas . Springer. págs. 56–58 . ISBN 0-387-21245-0.
- ↑ Haunsperger, Deanna; Kennedy, Stephen, eds. (2006). El borde del universo: Celebrando diez años de Math Horizons . Mathematical Association of America. p. 38. ISBN 978-0-88385-555-3. LCCN 2005937266 .
- ↑ Gumm, H. (enero de 1985). "Una nueva clase de métodos de dígitos de control para sistemas numéricos arbitrarios (Corresp.)" . IEEE Transactions on Information Theory . 31 (1): 102– 105. doi : 10.1109/TIT.1985.1056991 .
- ↑ Sisson, Roger L. (mayo de 1958). "Una comprobación mejorada de redundancia decimal" . Communications of the ACM . 1 (5): 10– 12. doi : 10.1145/368819.368854 .
- ^ Gallian , Joseph A. (2010). Álgebra abstracta contemporánea (7ª ed.). Brooks/Cole. pag. 111 . ISBN 978-0-547-16509-7. LCCN 2008940386 . Consultado el 26 de agosto de 2011 .
dígito de control verhoeff.
- ↑ Verhoeff 1969 , pág. 95
- ↑ Verhoeff 1969 , pág. 83
- ↑ "Actas de EIMI 2010" (PDF) . Instituto Freudenthal, Universidad de Utrecht . Lisboa, Portugal: Interfaces educativas entre matemáticas e industria. 2010. pág. 128. doi : 10.1007/978-3-319-02270-3 . Archivado del original (PDF) el 16 de mayo de 2024. Consultado el 13 de septiembre de 2025 .
- ↑ Surelia, Vipin. "Implementación del algoritmo de Verhoeff por parte de los bancos para aplicaciones relacionadas con Aadhaar" (PDF) . npci.org.in. Corporación Nacional de Pagos de la India. pág. 1. Archivado del original (Circular Oficial) el 10 de septiembre de 2025. Recuperado el 10 de septiembre de 2025 .
- ↑ "Número de referencia del punto de medición (MPRN)" . mrso.ie. Operador del sistema de registro de contadores, Irlanda. Archivado del original el 13 de septiembre de 2025. Consultado el 13 de septiembre de 2025 .
- ↑ "Cálculo del dígito de control" . docs.snomed.org . SNOMED International. Archivado del original (Documentación oficial) el 13 de septiembre de 2025. Consultado el 13 de septiembre de 2025 .
Enlaces externos
- Descripción detallada del algoritmo de Verhoeff. Archivado el 26 de abril de 2006 en la Wayback Machine.
- aritmética modular
- Algoritmos de suma de verificación
- Detección y corrección de errores
- Presentaciones de 1969