Red de conocimiento del abogados - Preguntas y respuestas penales - ¿Qué es el método de verificación "2121"?

¿Qué es el método de verificación "2121"?

La verificación 2121 debería utilizar el algoritmo de Luhn.

Algoritmo de Luhn o fórmula de Luhn

, también conocido como “algoritmo de módulo 10”. Es una fórmula de verificación simple que normalmente se usa para verificar números de identificación, números IMEI, números de identificación de proveedores de EE. UU. o números de seguro social de Canadá. El algoritmo fue desarrollado por el científico de IBM Hans.

Creada por Peter Luhn, la solicitud de patente fue presentada el 6 de junio de 1954 y concedida el 23 de agosto de 1960. El número de patente estadounidense es 2950048.

Este algoritmo siempre ha sido utilizado por todo el mundo, y también es muy utilizado en la actualidad. Se especifica en ISO/IEC7812-1. No pretende ser una función hash criptográficamente segura; su propósito es proteger contra errores accidentales, no ataques maliciosos. Muchas tarjetas de crédito y muchos números de identificación gubernamentales utilizan este algoritmo para extraer dígitos significativos de una serie de números aleatorios.

Ventajas y desventajas

Rune

Este algoritmo detectará cualquier error de código y casi todos los errores de desalineación de dígitos adyacentes. Sin embargo, no detectará errores con secuencias de dos dígitos del 09 al 90 (o viceversa). Detectará los mismos errores de dos dígitos siete de cada diez veces (el intercambio de 22 y 55, el intercambio de 33 y 66, el intercambio de 44 y 77 no serán detectados). Otros algoritmos de verificación de números más complejos, como el algoritmo de Verhoff, pueden detectar más errores de transcripción. El módulo n del algoritmo de Luhn es una extensión del algoritmo de Luhn y admite cadenas no numéricas. Porque el algoritmo funciona de derecha a izquierda y el bit cero afectará los resultados del cálculo. Sólo si el bit cero hace que se mueva un dígito o que el comienzo de una serie de dígitos se llene con ceros, no afecta el resultado del cálculo. Por lo tanto, ya sea que rellenes 1234 con ceros hasta 0001234 antes o después, obtendrás el mismo resultado usando el algoritmo de Luhn.

Este algoritmo está patentado en Estados Unidos y se utiliza para calcular códigos de verificación para dispositivos portátiles o mecánicos. Así que asegúrese de hacerlo lo más simple posible.

Explicación informal

Esta fórmula verificará una cadena de números mediante una suma de verificación. El código de verificación generalmente se agrega al número de cuenta para formar un número de cuenta completo. Las cuentas fragmentadas deben pasar las siguientes pruebas:

1. Contar desde el dígito de paridad (el dígito de paridad generalmente se agrega al final de la cuenta) y los números pares se multiplican por 2 en orden de derecha a izquierda. .

2. Suma los resultados (por ejemplo: 10 = 1 = 1, 14 = 1+4 = 5). Algunas personas dicen que si el resultado de multiplicar por 2 es un número de dos dígitos, entonces directamente se resta 9, y el resultado de sumar los dígitos anteriores es

3. Si la suma módulo 10 es 0 (Eso. es decir, si el resultado de la suma termina en 0 y es múltiplo de 10), entonces, según el algoritmo de Luhn, esta cadena numérica es válida y viceversa.

Supongamos que una cadena es "7992739871", le agregamos un bit de paridad y el número final es 7992739871x:

Número de cuenta: 7 9 9

2 7 3

9 8 7 1 x

Números pares multiplicados por 2: 7 18 94 76 9.

16 7 2

x

Número añadido: 7 9 9 4 7 6 9 7 7.

2 =67

El código de verificación La suma es un múltiplo entero de 10, pero el resultado es el mismo). En términos sencillos:

1. Calcula la suma de todos los números (67).

2. Multiplicar por 9 (603).

3. Tome el último dígito (3).

4. El resultado es el bit de paridad.

Otra forma de obtener el dígito de control: primero calcula la suma de todos los dígitos y resta la suma de todos los dígitos de 10 módulo 10. (La unidad de 67 es 7; 10-7=3 es el bit de paridad). En términos sencillos:

1. Calcula la suma de todos los números (67).

2. Tome el dígito único (7).

3. Resta el número de unidades (3) a 10.

4. El resultado es el bit de paridad.

De esta forma obtendrás el número de cuenta completo: 7992739871x.

Los siguientes números son 79927398711, 79927398712, 7992798713, 79927398714,

79927398715, 79927398716, 79927398717, 79927398,

79927398719 se verifica mediante el siguiente método.

1. Comenzando desde el extremo derecho, multiplica los números pares por 2: (1 * 2) = 2, (8*2)=16, (3*2)=6, (2*2) =4, (9 * 2) = 65436.

2. Sume cada número: x(dígito de control)+(2)+7+(1+6)+9+(6)+7+(4)+9+( 1+8 )+7 = x+67.

3. Si el resultado es múltiplo de 10, entonces la cuenta puede ser válida. Cabe señalar que 3 es el único dígito que hace que la suma (67+x) sea un múltiplo entero de 10.

4. Por lo tanto, excepto 79927398713, todas las cuentas anteriores no son válidas.

Implementación de código de verificación de bits de paridad

Python implementa las siguientes funciones:

def luhn_checksum (número de tarjeta):

Número de bits de definición (n):

return [int(d) for d in str(n)]

dígitos = dígitos_de(número de tarjeta)

dígitos _ impares = dígitos[-1::-2]

Número par de dígitos = dígitos[-2::-2]

Suma de comprobación = 0

Suma de comprobación Suma de comprobación + = suma (número impar de dígitos)

Para d con número par de dígitos:

Suma de verificación + = suma (d*2do dígito)

Devuelve % de suma de verificación 10

def is_luhn_valid(número de tarjeta):

return luhn _ checksum(tarjeta _ número) = = 0

Bit de paridad El cálculo de

El algoritmo anterior verifica la validez de los bits de paridad de entrada. Calcular los bits de paridad requiere un pequeño algoritmo adaptativo, a saber:

1. Cambiar multiplicación par/impar.

2. Si el módulo de suma 10 es igual a 0, el código de verificación es 0.

3. En caso contrario, el código de verificación es igual a la suma módulo 10 (10-(suma mod 10)) obtenida restando 10 a 10.

def calcular _ luhn(número_tarjeta_parcial):

Devuelve 10-luhn_checksum(int(número_tarjeta_parcial)* 10)