Java: Generar dígito verificador - Algoritmo de Luhn - Algoritmo de módulo 10

El algoritmo de Lenin 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.

https://es.wikipedia.org/wiki/Algoritmo_de_Luhn

Simple Clase: DigitoVerificadorLuhn.java

////////////////////////


import java.util.ArrayList;
import java.util.List;

public class DigitoVerificadorLuhn {

    public static boolean correctoVerificador(String card) {
        if (card == null)
            return false;
        char digitoverificador = card.charAt(card.length() - 1);
        String digito = calculaDigitoVerificador(card.substring(0, card.length() - 1));
        return digitoverificador == digito.charAt(0);
    }
   
    public static String calculaDigitoVerificador(String original) {
        if (original == null)
            return null;
        String digit;
        /* se convierte el número en un arreglo de digitos */
        int[] digits = new int[original.length()];
        for (int i = 0; i < original.length(); i++) {
            digits[i] = Character.getNumericValue(original.charAt(i));
        }
       
        /* se duplica cada dígito desde la derecha saltando de dos en dos*/
        for (int i = digits.length - 1; i >= 0; i -= 2)    {
            digits[i] += digits[i];
           
            /* si la suma de los digitos es más de 10, se resta 9 */
            if (digits[i] >= 10) {
                digits[i] = digits[i] - 9;
            }
        }
        int sum = 0;
        for (int i = 0; i < digits.length; i++) {
            sum += digits[i];
        }
       
        /* se multiplica por 9 */
        sum = sum * 9;
       
        /* se convierte a cadena para obtener facilmente el último dígito */
        digit = sum + "";
        return digit.substring(digit.length() - 1);
    }
   
    public static void main(String[] args)    {
        List lista = new ArrayList();
        lista.add("702766100030681288");
        for(String s : lista)
        {
            String digit = calculaDigitoVerificador(s);
            System.out.println(s +"," + digit);
        }
    }
   
}

////////////////////////
Publicar un comentario

Entradas populares de este blog

Java - Ejemplo de como consumir un Web Service

Java: Primera aplicación web con Eclipse

Java - Ejemplo de como crear un Web Service