使用Java中的Luhn演算法實現信用卡驗證 - Java2Blog

banq發表於2020-05-05

Luhn 演算法(也稱為 模數10 或 mod 10 演算法)是一種簡單的校驗和過程,用於驗證各種標識號,例如信用卡號,加拿大社會保險號。此演算法旨在保護再次輸入錯誤或意外的錯誤,而不是惡意攻擊。大多數信用卡公司都採用此演算法,因為該演算法可在公共領域使用,並且任何人都可以使用。

以下是Luhn演算法中涉及的步驟。

步驟1 :從最右邊的數字開始,我們應該每隔一個數字加倍。使用Java中的Luhn演算法實現信用卡驗證  - Java2Blog

第2 步:當我們將數字加倍並獲得兩位數的乘積時,則應新增乘積的數字。使用Java中的Luhn演算法實現信用卡驗證  - Java2Blog

步驟3 :計算所有數字的總和。使用Java中的Luhn演算法實現信用卡驗證  - Java2Blog

步驟4 :如果總和可以除以10,即總和模10為0,則數字有效,否則無效。使用Java中的Luhn演算法實現信用卡驗證  - Java2Blog

由於 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();
    }
}

 

相關文章