Es conocido también como "algoritmo de módulo 10", es una fórmula de suma de verificación, se utiliza para validar una diversidad de números de identificación.
El algoritmo procede en tres pasos.
En el primer paso, cada segundo número, empezando por el segundo desde la derecha hacia la izquierda, se duplica. Si el resultado es mayor que 9, se forma la suma del resultado entre los dos dígitos (ej: 10 = 1 + 0 = 1, 14 = 1 + 4 =7)
En el segundo paso todos los números se suman.
Finalmente, en el último paso, el resultado se divide por 10. Si el resto es igual a 0, es la secuencia original de dígitos, el cual el cual fue revisado y es válido.
Ej:
Dígitos del número de cuenta 7 9 9 2 7 3 9 8 7 1 x
Duplicar cada siguiente 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
Nota: La "x" que se encuentra en el numero de cuenta, es el numero de control, que determina si el numero de cuenta es valido.
Pero como podemos saber que numero es el valor "x"
El dígito de chequeo (x) podemos optenerlo de (67 * 9 mod 10). En términos sencillos:
Calcular la suma de los dígitos 67.
Multiplicar por 9 y el resultado es de 603.
Tomar el último dígito 3.
El resultado es el dígito de chequeo.
A continuacion el algortimo de luhn relizado en java:
public static boolean verificacionluhn(int[] digits){
int sum = 0;
int length = digits.length;
for(int i = 0; i < length; i++) {
// sacar los digitos en orden inverso
int digit = digits[length - i - 1];
// cada segundo número se multiplica por 2
if(i % 2 == 1) {
digit = digit * 2;
}
if(digit > 9){
digit = digit - 9;
}
sum = sum + digit;
}
return sum % 10 == 0;
}