La mayoría llevamos con nosotros tarjetas de crédito y del cajero automático. Normalmente tienen dieciséis dígitos en el frente. Estos dígitos son el número de cuenta único de la tarjeta. Pero por razones obvias, estos dieciséis dígitos por sí solos no funcionarán, siguen un patrón.

He aquí una carta ficticia que me he inventado:

Los primeros caracteres del número de tarjeta describen el tipo de tarjeta.

Advertisement

Advertisement

Algunas tarjetas son Visa, otras Mastercard y algunas son American Express, por lo que a continuación se muestra una lista de algunos de los prefijos de tarjetas comunes. Las tarjetas pueden ser identificadas por sus primeros dígitos (lo puedes comprobar ahora, coge algunas tarjetas de tu cartera y míralo).

Dígitos de verificación

Generalmente los números de la tarjeta de crédito se escriben, se transfieren y se citan. Toda esta transmisión puede causar errores, especialmente teniendo en cuenta que los seres humanos están involucrados en el proceso. Porque los humanos a menudo cometen errores en la transferencia. Para tratar de minimizar esto los números de tarjetas de crédito contienen un dígito de control.

Advertisement

En un típico número de tarjeta de crédito de dieciséis dígitos, los primeros quince dígitos son determinados por el banco emisor pero el último dígito, denominado dígito de control, se determina matemáticamente en función de todos los demás dígitos.

No seleccionas este último dígito, es determinista. La fórmula matemática exacta para su generación fue inventada por Hans Peter Luhn, un ingeniero en IBM en 1954. Originalmente patentado, el algoritmo ahora es de dominio público y es un norma estándar mundial ISO / IEC 7812-1.

Advertisement

Obviamente, con sólo un dígito de control, no todos los errores pueden ser detectados (hay una probabilidad de diez en un número aleatorio con el dígito de verificación correcto), pero el algoritmo de Luhn es inteligente en la forma en que detecta cualquier error individual (con un solo dígito incorrecto), como por ejemplo el intercambio de los 9 con un 6 en el ejemplo anterior. También detecta casi todos los * pares de conmutación de dos números adyacentes. Estos errores son los típicos y comunes que la gente hace cuando transcribe los números de la tarjeta, por lo que el dígito de control hace algo bueno.

Un beneficio secundario añadido es que, como se dijimos antes, sólo hay una probabilidad de una de cada diez de que un número generado al azar tenga el dígito de verificación correcto. Esto proporciona una pequeña cantidad de protección contra hackers o cualquiera que pueda intentar generar y adivinar aleatoriamente números de tarjetas de crédito.

El Algoritmo de Luhn

El algoritmo de Luhn se basa en el principio del módulo aritmético y las raíces digitales.

Advertisement

El algoritmo de Luhn utiliza la suma matemática mod-10.

Para calcular el dígito de control, multiplique cada dígito de posición par (cuando se cuenta desde la derecha) por dos. Si el resultado es un número de dos dígitos, entonces agregue estos dígitos juntos para crear un solo dígito.

Advertisement

Advertisement

A este total entonces agregamos cada dígito de la posición impar.

Esto resultará en un total (en nuestro ejemplo = 67). El dígito de verificación es el número que debe agregarse a este total para hacer el siguiente múltiplo de 10. En nuestro caso necesitaríamos agregar 3 para hacer 70. Así que el dígito de control para este número ficticio es 3.

(Esto es lo mismo que preguntar qué valor tendría que tener el dígito de verificación para hacer que la suma mod 10 sea igual a 0. Qué número debería agregarse a la cadena para hacer una suma que, cuando se dividida por 10, no de ningún resto. )

Otros usos

Agregar un dígito de control es una práctica muy común para asegurarse de que los números están bien correctos y no han caído en un simple error de transcripción o un fraude.

Advertisement

Advertisement

Aquí hay una selección de otros números comunes que tienen dígitos de verificación (no todos usan el Algoritmo de Luhns, hay algunos otros sistemas de codificación comunes):

Números VIN de automóvil, códigos de barras, números ISBN en libros y revistas, números de impuestos australianos, números de seguridad social húngaros, códigos de bancos americanos ...

Para aquellos interesados ​​en aprender más, hay un par de algoritmos de dígitos de verificación complicados además de Luhn. Estos son el algoritmo de Verhoeff (1969) y el algoritmo de Damm (2004). Ambos ofrecen todos los beneficios de Luhn (detectando cualquier error de un solo dígito), pero también son capaces de detectar cualquier transposición adyacente de dígitos en pares. Incluso hay sistemas que se expanden para hacer frente a errores en el texto y no sólo números.

Paridad

El concepto de dígitos de verificación ha existido durante mucho tiempo. En los primeros días de la informática, RAM no era tan confiable como lo es hoy. Los diseñadores de ordenadores querían una manera de detectar fallos de hardware de la memoria.

Advertisement

Advertisement

La solución que surgió fue el concepto de Paridad. Los ocho bits que componían un byte fueron contados. El resultado fue un número impar de bits o un número par de bits. Para cada byte, se generó un bit adicional. Esto se llamó el Bit de Paridad.

El valor de este bit de paridad se estableció en base al recuento de bits de ajuste y se seleccionó de manera que (típicamente) el número de bits ajustado al valor 1 fuera par. Esto se llamó Paridad Pareja.

(También es posible configurar el sistema para mantener un número impar de bits, lo que se denomina Paridad Impar. Ambos sistemas son perfectamente aceptables, el usuario elige la versión que va a utilizar y se adhiere a ella.)

Siempre que se leía un valor, bajo un tipo de nivel de hardware, la paridad era recalculada. Si la paridad era incorrecta se podría plantear un error. Se puede ver claramente cómo el cambio de cualquier bit único (volteando su estado) haría que la paridad fallara.

Advertisement

Advertisement

Eso sí, no le diría qué bit había fallado, sólo que un bit era incorrecto (podría haber sido incluso el bit de la paridad el que falló).

Los chips de memoria RAM se han vuelto más fiables en estos días y la mayoría de los PC modernos no soportan la paridad RAM. Sin embargo, los servidores de gama alta y los ordenadores encargados de velar por misiones críticas (de bancos, centrales eléctricas ...) todavía tienen protección de paridad de hardware. De hecho, toman esto un paso más allá e implementan algo llamado ECC (Error-Correcting Code memory). Como mencionamos anteriormente, la simple paridad normalmente sólo te dice que algo está mal (y sólo si una cosa va mal), pero no dice qué. Esto es increíblemente valioso de saber, pero no te ayuda a arreglar las cosas. Aquí es donde entra en juego ECC ...

La memoria ECC funciona de una manera más compleja. Analiza la información a través de un bloque de datos. Es capaz de detectar todos los errores de un bit y la mayoría de los errores de dos bits simultáneos, pero más importante que todo esto, es capaz de corregir cualquier error de un solo bit y volver a poner el valor correcto. Es más complejo que la simple paridad y requiere de múltiples bits de paridad por byte.

Advertisement

La matemática involucrada es bastante compleja y está fuera del alcance de este artículo, pero se basa en el concepto de redundancia y almacenamiento de información, matemáticamente hablando, en más de una ubicación. Si desean saber más puede comenzar aquí con información sobre la corrección de errores de Reed-Solomon.

Para mostrar el concepto básico, imagine a continuación el siguiente escenario con un bit desconocido de información. Si podemos confiar en todos los demás bits, y sabemos que estamos utilizando paridad uniforme, somos capaces de reparar el bit de información que falta (en el caso de que el bit que falta necesite ser un cero).

RAID

Un ejemplo final del uso de esta tolerancia de daños de la industria es la tecnología de almacenamiento RAID.

Advertisement

Advertisement

Los discos duros giratorios, siendo componentes móviles, suelen ser los componentes más frágiles de los sistemas informáticos. Mientras que el mundo ha girado a los SSD (eres joven y muy afortunado) no has tenido la experiencia de primera mano de una cierta clase de fallos que se daban con los discos duros antiguos.

Dado que los datos almacenados en los discos duros suelen ser bastante valiosos, se desea redundancia en el almacenamiento. Una solución es simplemente un mirror de los datos en un conjunto paralelo de unidades. Esto ciertamente funciona, pero requiere duplicar todas las unidades.

Un enfoque alternativo, y un poco más rentable, es usar el principio de paridad y dividir los datos, y la paridad, sobre una colección de unidades. La teoría es que mientras que un disco puede fallar, la probabilidad de que lo hagan dos es pequeña. Una vez que se detecta que una unidad va mal, entonces puedes confiar en la redundancia en el sistema para seguir funcionando mientras se reemplaza la unidad que está mal. Una vez que la nueva unidad está instalada puedes volver a llenar la paridad y los datos y proporcionar protección de nuevo, todo sin repercutir en tiempo de inactividad.

Advertisement

RAID originalmente representaba “Redundant Array of Cheap Disks”, en referencia a cuando los discos duros eran caros y menos confiables de lo que son hoy en día. Cuando se diseñó la teoría era construir conjuntos de unidades de disco baratas, sabiendo por adelantado que probablemente fallarían regularmente, pero utilizando unidades más baratas la redundancia y el reemplazo era más rentable que la compra de unidades muy caras con una fiabilidad ligeramente mejor.

Era como confiar en una red de seguridad.

Advertisement

Actualmente, con la fiabilidad y las mejoras tecnológicas, todavía tenemos redes de seguridad, pero son sólo eso, redes de seguridad, no es el procedimiento operativo estándar. Para reflejar esto la industria ha cambiado la definición de RAID, la cual significa ahora para “Redundant Array of Independent Disks”.

Advertisement

Aquí puede ver otros artículos interesantes de Data Genetics.