fbpx
Wikipedia

Algoritmo de Luhn

El algoritmo de Luhn o fórmula de Luhn, también conocida como "algoritmo de módulo 10", es una fórmula de suma de verificación, utilizada para validar una diversidad de números de identificación; como números de tarjetas de crédito, números IMEI, etc. Su idea se convirtió en la base de uno de los algoritmos más importantes de nuestra era, la función resumen/hash como la conocemos hoy.

Creación

Este algoritmo fue creado por el científico de IBM llamado Hans Peter Luhn y descrito en la patente U.S. Patent No. 2,950,048, solicitada el 6 de enero de 1954, y concedida el 23 de agosto de 1960.

Dominio público

Este algoritmo es de dominio público y es ampliamente usado en la actualidad. Su especificación está contenida en la norma ISO/IEC 7812-1.[1]​ Su propósito no es de ser una función hash criptográfica segura contra ataques maliciosos, sino que fue diseñada para protección contra errores accidentales. La gran mayoría de tarjetas de crédito y otros números de identificación usan este algoritmo como un método simple de distinguir números válidos a partir de una entrada de números al azar.

Fortalezas y debilidades

El algoritmo de Luhn detecta cualquier error de un único dígito, así como casi todas las transposiciones de dígitos adyacentes. No obstante, no puede detectar la transposición de la secuencia de dos dígitos 09 a 90 (o viceversa). En ese sentido, detectará siete de los 10 posibles errores individuales posibles (no detectará 2255, 3366 o 4477).

Además, otros algoritmos más complejos basados en chequeo de dígitos (como el algoritmos de Verhoeff) pueden detectar más errores de transcripción. El algoritmo de Luhn mod N es una extensión que soporta cadenas de texto no numéricas.

Debido a que el algoritmo opera sobre los dígitos, de derecha a izquierda, y los dígitos cero afectan el resultado sólo si causan cambio en una posición, una cadena de números rellenada de ceros al principio no afecta el cálculo. Por lo tanto, los sistemas que rellenan un número específico de dígitos mediante la conversión de 1234 a 0.001.234 (por ejemplo), pueden llevar a cabo la validación Luhn antes o después del relleno y lograr el mismo resultado.

El algoritmo apareció en una patente estadounidense para un dispositivo mecánico manual que valida números por suma de verificación. El algoritmo por tanto debía ser bastante sencillo. El dispositivo toma la suma mod 10 por medios mecánicos. Los dígitos de sustitución , es decir, el resultado del proceso de duplicar y reducir, no se producía mecánicamente. Más bien, los dígitos eran marcados en su orden permutado en el cuerpo de la máquina.

Explicación informal

La fórmula verifica un número contra su dígito de chequeo incluido, el cual es usualmente agregado a un número de cuenta parcial para generar el número de cuenta completo. Este número de cuenta debe pasar la siguiente prueba:

  1. A partir del dígito de chequeo incluido, el cual está a la derecha de todo el número, ir de derecha a izquierda duplicando cada segundo dígito.
  2. Sumar los dígitos del resultado: (ejemplo: 10 = 1 + 0 = 1, 14 = 1 + 4 = 5) juntos con los dígitos sin duplicar del número original.
  3. Si el total de módulo 10 es igual a 0 (si el total termina en cero), entonces el número es válido de acuerdo con la fórmula Luhn, de lo contrario no es válido.

Supongamos un ejemplo de un número de cuenta "7992739871", que contará con un dígito de control adicional, por lo que es de la forma 7992739871x:

Dígitos del número de cuenta 7 9 9 2 7 3 9 8 7 1 x
Duplicar dígitos pares 7 18 9 4 7 6 9 16 7 2 x
Sumar los dígitos 7 9 9 4 7 6 9 7 7 2 =67

El dígito de chequeo (x) se obtiene entonces de (67 * 9 mod 10). En términos sencillos:

  1. Calcular la suma de los dígitos (67).
  2. Multiplicar por 9 (603).
  3. Tomar el último dígito (3).
  4. El resultado es el dígito de chequeo.

(Método alternativo) El dígito de chequeo (x) se obtiene de (67 => dígito de las unidades: 7; 10 - 7 = dígito de chequeo: 3). En términos sencillo:

  1. Calcular la suma de los dígitos (67).
  2. Tomar el dígito de las unidades 7.
  3. Restar el dígito de las unidades del módulo 10.
  4. El resultado es 3.
  5. El resultado es el dígito de chequeo.

Entonces, el número de cuenta completo es 79927398713.

Implementaciones

Verificación del dígito de chequeo

En Pascal

function CheckLuhn(purportedCC: String): Boolean; var i: Integer; Sum: Integer; Digit: Integer; begin Sum := 0; for i := Length( purportedCC ) downto 1 do begin Digit := Ord( purportedCC[ i ] ) - Ord( '0' ); if not(Odd( i )) then begin Digit := Digit * 2; if (Digit > 9) then Digit := Digit - 9; end; Inc( Summ, Digit ); end; Result := Summ mod 10 = 0; end; 

En Python:

def is_luhn_valid(cc): #Parametro ejemplo 5256783371567695 num = map(int, str(cc)) return sum(num[::-2] + [sum(divmod(d * 2, 10)) for d in num[-2::-2]]) % 10 == 0 

Cálculo del dígito de chequeo

La implementación de arriba chequeó la validez de una entrada con un dígito de chequeo. El cálculo de dicho dígito requiere de una pequeña adaptación de lo anterior:

  1. Cambiar la multiplicación par / impar.
  2. Si la (suma mod 10) == 0, entonces el dígito de chequeo es 0.
  3. Si no, el dígito de chequeo es igual a (10 - (sum mod 10))

En Python:

def calculate_luhn(cc): num = map(int, str(cc)) check_digit = 10 - sum(num[-2::-2] + [sum(divmod(d * 2, 10)) for d in num[::-2]]) % 10 return 0 if check_digit == 10 else check_digit 

En Python 3:

def calculate_luhn(cc): numMap = map(int, str(cc)) num = list(numMap) check_digit = 10 - sum(num[-2::-2] + [sum(divmod(d * 2, 10)) for d in num[::-2]]) % 10 return 0 if check_digit == 10 else check_digit 

Véase también

Notas y referencias

  1. ISO/IEC 7812-1:2006 Identification cards -- Identification of issuers -- Part 1: Numbering system (en inglés)
  • Patente USPTO n.º 2950048, Computer for Verifying Numbers, Hans P. Luhn, August 23, 1960.

Enlaces externos

  • Luhn implementations in JavaScript (en inglés)
  • Validation of Luhn in PHP (en inglés)
  • Ruby: Luhn validation, Luhn generation (en inglés)
  • C++: Vortimux (Un generador y validador de tarjetas de credito)
  • python: https://crackedpedia.com/mastercam-x9-crack/
  • Java: [1]
  •   Datos: Q915402

algoritmo, luhn, algoritmo, luhn, fórmula, luhn, también, conocida, como, algoritmo, módulo, fórmula, suma, verificación, utilizada, para, validar, diversidad, números, identificación, como, números, tarjetas, crédito, números, imei, idea, convirtió, base, alg. El algoritmo de Luhn o formula de Luhn tambien conocida como algoritmo de modulo 10 es una formula de suma de verificacion utilizada para validar una diversidad de numeros de identificacion como numeros de tarjetas de credito numeros IMEI etc Su idea se convirtio en la base de uno de los algoritmos mas importantes de nuestra era la funcion resumen hash como la conocemos hoy Indice 1 Creacion 2 Dominio publico 3 Fortalezas y debilidades 4 Explicacion informal 5 Implementaciones 5 1 Verificacion del digito de chequeo 5 2 Calculo del digito de chequeo 6 Vease tambien 7 Notas y referencias 8 Enlaces externosCreacion EditarEste algoritmo fue creado por el cientifico de IBM llamado Hans Peter Luhn y descrito en la patente U S Patent No 2 950 048 solicitada el 6 de enero de 1954 y concedida el 23 de agosto de 1960 Dominio publico EditarEste algoritmo es de dominio publico y es ampliamente usado en la actualidad Su especificacion esta contenida en la norma ISO IEC 7812 1 1 Su proposito no es de ser una funcion hash criptografica segura contra ataques maliciosos sino que fue disenada para proteccion contra errores accidentales La gran mayoria de tarjetas de credito y otros numeros de identificacion usan este algoritmo como un metodo simple de distinguir numeros validos a partir de una entrada de numeros al azar Fortalezas y debilidades EditarEl algoritmo de Luhn detecta cualquier error de un unico digito asi como casi todas las transposiciones de digitos adyacentes No obstante no puede detectar la transposicion de la secuencia de dos digitos 09 a 90 o viceversa En ese sentido detectara siete de los 10 posibles errores individuales posibles no detectara 22 55 33 66 o 44 77 Ademas otros algoritmos mas complejos basados en chequeo de digitos como el algoritmos de Verhoeff pueden detectar mas errores de transcripcion El algoritmo de Luhn mod N es una extension que soporta cadenas de texto no numericas Debido a que el algoritmo opera sobre los digitos de derecha a izquierda y los digitos cero afectan el resultado solo si causan cambio en una posicion una cadena de numeros rellenada de ceros al principio no afecta el calculo Por lo tanto los sistemas que rellenan un numero especifico de digitos mediante la conversion de 1234 a 0 001 234 por ejemplo pueden llevar a cabo la validacion Luhn antes o despues del relleno y lograr el mismo resultado El algoritmo aparecio en una patente estadounidense para un dispositivo mecanico manual que valida numeros por suma de verificacion El algoritmo por tanto debia ser bastante sencillo El dispositivo toma la suma mod 10 por medios mecanicos Los digitos de sustitucion es decir el resultado del proceso de duplicar y reducir no se producia mecanicamente Mas bien los digitos eran marcados en su orden permutado en el cuerpo de la maquina Explicacion informal EditarLa formula verifica un numero contra su digito de chequeo incluido el cual es usualmente agregado a un numero de cuenta parcial para generar el numero de cuenta completo Este numero de cuenta debe pasar la siguiente prueba A partir del digito de chequeo incluido el cual esta a la derecha de todo el numero ir de derecha a izquierda duplicando cada segundo digito Sumar los digitos del resultado ejemplo 10 1 0 1 14 1 4 5 juntos con los digitos sin duplicar del numero original Si el total de modulo 10 es igual a 0 si el total termina en cero entonces el numero es valido de acuerdo con la formula Luhn de lo contrario no es valido Supongamos un ejemplo de un numero de cuenta 7992739871 que contara con un digito de control adicional por lo que es de la forma 7992739871x Digitos del numero de cuenta 7 9 9 2 7 3 9 8 7 1 xDuplicar digitos pares 7 18 9 4 7 6 9 16 7 2 xSumar los digitos 7 9 9 4 7 6 9 7 7 2 67El digito de chequeo x se obtiene entonces de 67 9 mod 10 En terminos sencillos Calcular la suma de los digitos 67 Multiplicar por 9 603 Tomar el ultimo digito 3 El resultado es el digito de chequeo Metodo alternativo El digito de chequeo x se obtiene de 67 gt digito de las unidades 7 10 7 digito de chequeo 3 En terminos sencillo Calcular la suma de los digitos 67 Tomar el digito de las unidades 7 Restar el digito de las unidades del modulo 10 El resultado es 3 El resultado es el digito de chequeo Entonces el numero de cuenta completo es 79927398713 Implementaciones EditarVerificacion del digito de chequeo EditarEn Pascalfunction CheckLuhn purportedCC String Boolean var i Integer Sum Integer Digit Integer begin Sum 0 for i Length purportedCC downto 1 do begin Digit Ord purportedCC i Ord 0 if not Odd i then begin Digit Digit 2 if Digit gt 9 then Digit Digit 9 end Inc Summ Digit end Result Summ mod 10 0 end En Python def is luhn valid cc Parametro ejemplo 5256783371567695 num map int str cc return sum num 2 sum divmod d 2 10 for d in num 2 2 10 0 Calculo del digito de chequeo Editar La implementacion de arriba chequeo la validez de una entrada con un digito de chequeo El calculo de dicho digito requiere de una pequena adaptacion de lo anterior Cambiar la multiplicacion par impar Si la suma mod 10 0 entonces el digito de chequeo es 0 Si no el digito de chequeo es igual a 10 sum mod 10 En Python def calculate luhn cc num map int str cc check digit 10 sum num 2 2 sum divmod d 2 10 for d in num 2 10 return 0 if check digit 10 else check digitEn Python 3 def calculate luhn cc numMap map int str cc num list numMap check digit 10 sum num 2 2 sum divmod d 2 10 for d in num 2 10 return 0 if check digit 10 else check digitVease tambien EditarAlgoritmo Numero de tarjeta bancariaNotas y referencias Editar ISO IEC 7812 1 2006 Identification cards Identification of issuers Part 1 Numbering system en ingles Patente USPTO n º 2950048 Computer for Verifying Numbers Hans P Luhn August 23 1960 Enlaces externos EditarLuhn implementations in JavaScript en ingles Validation of Luhn in PHP en ingles Ruby Luhn validation Luhn generation en ingles C Vortimux Un generador y validador de tarjetas de credito python https crackedpedia com mastercam x9 crack Java 1 Datos Q915402Obtenido de https es wikipedia org w index php title Algoritmo de Luhn amp oldid 136909833, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos