使用Java中的Luhn算法实现信用卡验证 - Java2Blog


Luhn 算法(也称为 模数10 或 mod 10 算法)是一种简单的校验和过程,用于验证各种标识号,例如信用卡号,加拿大社会保险号。此算法旨在保护再次输入错误或意外的错误,而不是恶意攻击。大多数信用卡公司都采用此算法,因为该算法可在公共领域使用,并且任何人都可以使用。

以下是Luhn算法中涉及的步骤。
步骤1 :从最右边的数字开始,我们应该每隔一个数字加倍。
第2 步:当我们将数字加倍并获得两位数的乘积时,则应添加乘积的数字。
步骤3 :计算所有数字的总和。
步骤4 :如果总和可以除以10,即总和模10为0,则数字有效,否则无效。
由于 90 mod 10 为0 ,因此这是有效的信用卡号。
 

public class LuhnAlgorithmMain {
 
    public static void main(String[] args) {
        
        String cardNumber="1358954993914435";
        
        boolean validCreditCardNumber = isValidCreditCardNumber(cardNumber);
        
        if(validCreditCardNumber)
        {
            System.out.println(cardNumber+
" is valid as per luhn algorithm");
        }
        else
        {
            System.out.println(cardNumber+
" is not valid as per luhn algorithm");
        }
    }
    
    public static boolean isValidCreditCardNumber(String cardNumber)
    {
        
// int array for processing the cardNumber
        int[] cardIntArray=new int[cardNumber.length()];
        
        for(int i=0;i<cardNumber.length();i++)
        {
            char c= cardNumber.charAt(i);
            cardIntArray[i]=  Integer.parseInt(
""+c);
        }
        
        
        for(int i=cardIntArray.length-2;i>=0;i=i-2)
        {
            int num = cardIntArray[i];
            num = num * 2;  
// step 1
            if(num>9)
            {
                num = num%10 + num/10;  
// step 2
            }
            cardIntArray[i]=num;
        }
        
        int sum = sumDigits(cardIntArray);  
// step 3
        
        System.out.println(sum);
          
        if(sum%10==0)  
// step 4
        {
            return true;
        }
        
        return false;
        
    }
    
    public static int sumDigits(int[] arr)
    {
        return Arrays.stream(arr).sum();
    }
}