2011-11-24 62 views
7

Antes que nada, no estoy seguro si esto debería estar en stackoverflow, pero pensé que trataría de preguntar de todos modos.Algoritmo de Luhn o Verhoeff para números de tarjeta de crédito

En el pasado siempre he usado el algoritmo luhn para la comprobación de errores en los números de tarjetas de crédito, pero hoy pensé que implementaría el algoritmo verhoeff en php, principalmente para matar el tiempo.

Lo probé en mis propios números de tarjeta y funcionó bien, lo que me hizo pensar si debería usar Verhoeff sobre luhn para verificar mi error de tarjeta de crédito en el futuro.

Ahora mis preguntas:

Habría alguna ventaja significativa en el uso de Verhoeff sobre luhn?

Sé que verhoeff es un poco más complejo en su implementación y puede detectar más errores de transcripción que luhn, lo que naturalmente me llevaría a pensar que es un poco más lento, pero aparte de la ventaja de detectar más errores de transcripción y Desventaja (si realmente puedes llamarlo así) de ser un poco más lento, no puedo pensar en otras diferencias reales.

¿Funcionará el algoritmo verhoeff para todas las tarjetas importantes?

Sé que luhn funcionará para todas las tarjetas principales, pero ¿Verhoeff también funcionará para todas ellas? Estoy bajo la suposición de que funcionará para todos ellos, pero pensé que debería verificar de todos modos.

¿Hay alguna razón por la que solo he visto a personas que usan luhn verificar los números de las tarjetas de crédito?

En todo mi tiempo como desarrollador solo he visto personas que usan el algoritmo luhn para verificar los números de las tarjetas de crédito. ¿Hay una buena razón para esto, o simplemente es que luhn es más conocido?

Cualquier ayuda sería apreciada, gracias por su tiempo.

Respuesta

8

Son algoritmos diferentes y pueden dar resultados diferentes (si los resultados fueran siempre iguales, tendrían el mismo poder). Ya dijiste que Verhoeff era más fuerte, así que debes aceptar que hay algunos números que dan valores diferentes a Luhn!).

Cuando se usa con una tarjeta de crédito, se marca el dígito final con el resto del número. Este dígito de control está presente en la tarjeta (por lo tanto, es fijo) y se calcula utilizando el algoritmo de Luhn.

Así que no puede usar Verhoeff, porque el último dígito en una tarjeta de crédito es para Luhn. Para usar Verhoeff en su lugar, debería cambiar el dígito final de (algunas de) las cartas que ya existen.

Las personas que diseñaron el formato de tarjeta de crédito original tuvieron esta opción (módulo de detalles históricos) y decidieron ir con Luhn. Ellos eligen. No puede alterar su decisión en retrospectiva porque el dígito de control de Luhn está presente en las tarjetas existentes.

(no tengo ni idea de cómo se las arregló para ver sus cartas con este algoritmo éter tenías suerte, o su código está roto, o estoy equivocado ....)

En términos simples: no lo hará trabajo. No son lo mismo y la elección de Luhn fue hecha por el emisor de la tarjeta de crédito.

En términos más complejos: si los dos fueran compatibles, tendrían la misma potencia y no tendría sentido cambiarlos. No puede tener dos sumas de comprobación de diferente potencia que den resultados idénticos. Es un punto sutil, pero piénselo bien ...

+0

Después de leer su respuesta, también estoy confundido en cuanto a cómo revisé mis tarjetas. Comprobé 2 tarjetas diferentes, una dice mastercard, una dice visa y ambas "verificadas". Después de leer su respuesta, intentaré investigar más sobre esto, y por supuesto esperaré para ver qué otras respuestas podrían surgir;) ¡Gracias por su tiempo! –

+4

Ejemplo de PAN válida; 5555555555554444 luhn = pass verhoeff = fail –

+0

Una vez más, gracias por su respuesta andrew. Creo que voy a apuntar esto a la suerte. Pero me has ayudado a entender esto mucho mejor ahora, y Alex K, gracias por tu ejemplo. –

Cuestiones relacionadas