¿Cómo sabe un sitio web si un número de tarjeta de crédito determinado se equivoca al instante?

42

Estaba renovando mi suscripción a Internet a través del portal en línea de mi ISP. Lo que me sorprendió fue cuando ingresaba los datos de mi tarjeta de crédito, ingresé el tipo de mi tarjeta de crédito (MasterCard, Visa, AA, etc.) y cuando ingresé los números, hubo un número que ingresé mal. Cuando presioné el botón de envío, el sitio web automáticamente me dio un error al indicar que el número de tarjeta que ingresé no era válido. Siento que esto se hizo localmente en el navegador y no se empujó ni verificó ningún dato en un servidor y se envió una respuesta.

Mi pregunta es, ¿hay alguna secuencia de números que tenga cada proveedor? De lo contrario, ¿cómo sabría el sitio web (localmente) el número equivocado?

    
pregunta tony9099 16.02.2015 - 16:35
fuente

5 respuestas

67

Checksums

Los números CC, así como casi cualquier otro número importante bien diseñado (por ejemplo, números de cuenta en bancos) tienden a incluir una suma de verificación para verificar la integridad del número. Si bien no es una función de seguridad (ya que es trivial de calcular), un algoritmo de suma de comprobación decente puede garantizar que siempre fallará si (a) se realizó un solo error tipográfico o (b) se intercambian dos dígitos adyacentes, que son los dos errores más comunes cuando se realiza manualmente introduciendo números largos.

enlace es un ejemplo de dicha prueba.

Emisor

Si un número CC es técnicamente correcto, es posible que aún no sea un número CC real. El método para verificar que es simple y complicado al mismo tiempo, por lo general, si tiene acceso adecuado, puede buscar en la institución emisora para cada rango de números de tarjeta, y luego pregunta al [sistemas de tarjeta del emisor] si Ellos piensan que esta es una tarjeta válida. Bueno, la segunda parte generalmente ocurre como parte de un pago CC, pero a veces la verificación del emisor se realiza antes como una prueba extendida; pero no en el navegador del cliente.

    
respondido por el Peteris 16.02.2015 - 18:11
fuente
36

En los Estados Unidos, usan el algoritmo de Luhn:

enlace

Cómo el algoritmo verifica un número:

  1. Desde el dígito más a la derecha, que es el dígito de control, moviéndose a la izquierda, se duplica el valor de cada segundo dígito; Si el producto de esta operación de duplicación es mayor que 9 (por ejemplo, 8 × 2 = 16), sume los dígitos de los productos (por ejemplo, 16: 1 + 6 = 7, 18: 1 + 8 = 9).
  2. Tome la suma de todos los dígitos.
  3. Si el módulo total 10 es igual a 0 (si el total termina en cero), entonces el número es válido de acuerdo con la fórmula de Luhn; de lo contrario no es válido.

Cómo calcular el dígito de control:

El dígito de verificación se obtiene calculando la suma de los dígitos y luego computando 9 veces ese valor módulo 10. En forma de algoritmo:

  1. Calcule la suma de los dígitos (después de duplicar cada segundo dígito).
  2. Multiplica por 9.
  3. El último dígito es el dígito de control.

Ejemplo:

Número: 4321-5678-7531-456x (donde x es el dígito de control).

1. Number:              4   3   2   1   5   6   7   8   7   5   3   1   4   5   6   X
2. Double every second: 8       4      10      14      14       6       8      12
3. Sum digits >9:       8   3   4   1   1   6   5   8   5   5   6   1   8   5   3
4. Sum all digits:      8 + 3 + 4 + 1 + 1 + 6 + 5 + 8 + 5 + 5 + 6 + 1 + 8 + 5 + 3 = 69

5. Multiply sum by 9:   69 x 9 = 621
6. Take value mod 10:   621 mod 10 = 1  =>  x = 1

El dígito de control es 1 y el número válido completo es 4321-5678-7531-4561 .

Si tuviera que ejecutar el algoritmo nuevamente para verificar el número, entonces la suma de todos los dígitos en el Paso 4 sería 69 + 1 = 70 . Luego, 70 mod 10 = 0 , por lo que el número es válido de acuerdo con el algoritmo.

    
respondido por el EarlCrapstone 16.02.2015 - 16:39
fuente
7
  1. Una gran cantidad de sitios tienen controles del lado del cliente en el CC #. Todos los números de tarjetas de crédito tienen aproximadamente la misma longitud. (Como los comentaristas señalan, hay varias longitudes. En general, las longitudes son conocidas por el implementador y hay un conjunto pequeño). Hay cadenas de números que se relacionan con cada proveedor.
  2. Desde un punto de vista de seguridad, es mejor que haya algunas verificaciones del lado del servidor también. Si eres un probador de la pluma, eso sería algo para comprobar. Si no lo eres, quédate fuera porque podrías meterte en un gran problema.

enlace

    
respondido por el baordog 16.02.2015 - 16:39
fuente
4

Sumas de comprobación, reconocimiento de rango de tarjeta y comprobaciones de longitud

La mayoría de los esquemas de tarjeta (pero no todos) utilizan las pruebas de suma de comprobación (Luhn) descritas en otras respuestas. Sin embargo, además, algunos algoritmos también utilizan el Reconocimiento de rango de tarjeta (CRR, por sus siglas en inglés) basado en el comienzo del número de tarjeta (también conocido como rango). Algunos también verifican la longitud de la tarjeta.

Vea, por ejemplo, las similitudes en muchos de los diversos algoritmos descritos en: enlace

    
respondido por el MikeRoger 17.02.2015 - 13:51
fuente
3

Sólo para completar: el algoritmo de Luhn tiene un defecto menor.

TL; DR: "el algoritmo de Luhn detecta la transposición de dígitos adyacentes si no son 09 o 90"

  

Si d1 y d2 son dígitos adyacentes en el número de tarjeta de crédito (d1! = d2), entonces su contribución a la suma de comprobación es f (d1) + d2 o f (d2) + d1, y si están transpuestas son f (d2) + d1 o f (d1) + d2. Si estas dos sumas son iguales o su diferencia es un múltiplo de 10, entonces la suma de control no distingue entre su transposición.

     

"Tarjetas de crédito" 2007, en Introducción a las matemáticas del dinero , Springer New York, NY, páginas 101-112.

La función f(d) es la duplicación y la suma de los dígitos que podrían definirse de la siguiente manera en python para los enteros d : def f(d): return sum([int(x) for x in str(2 * d)])

No hay dos dígitos que serán cero mod 10 en el escenario anterior. La prueba es tediosa, pero se puede encontrar en su totalidad en el siguiente recurso del cual he tomado la cita del bloque anterior.

    
respondido por el user68527 22.02.2015 - 13:46
fuente

Lea otras preguntas en las etiquetas