最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基于Luhn算法實現(xiàn)銀行卡卡號格式校驗詳解

 更新時間:2026年01月05日 08:27:23   作者:牛肉胡辣湯  
在金融行業(yè),特別是涉及到銀行卡處理的場景中,確保銀行卡號的有效性是至關(guān)重要的,本文將詳細(xì)介紹如何使用Java實現(xiàn)基于Luhn算法的銀行卡卡號格式校驗,有需要的可以了解下

引言

在金融行業(yè),特別是涉及到銀行卡處理的場景中,確保銀行卡號的有效性是至關(guān)重要的。Luhn算法(也稱為“模10算法”)是一種簡單的校驗和算法,用于驗證各種識別碼,如信用卡號、IMSI號等。本文將詳細(xì)介紹如何使用Java實現(xiàn)基于Luhn算法的銀行卡卡號格式校驗。

Luhn算法原理

Luhn算法的基本步驟如下:

從右向左對卡號進(jìn)行編號,最右邊的數(shù)字是第1位。

雙倍處理所有奇數(shù)位置的數(shù)字(即第1位、第3位、第5位等),如果結(jié)果大于9,則減去9。

求和所有數(shù)字。

檢查和:如果總和能夠被10整除,則卡號有效;否則無效。

Java實現(xiàn)

1. 定義方法

首先,我們需要定義一個方法來實現(xiàn)Luhn算法的校驗邏輯。

public class LuhnValidator {

    /**
     * 校驗銀行卡號是否有效
     *
     * @param cardNumber 銀行卡號
     * @return 卡號是否有效
     */
    public static boolean isValidCardNumber(String cardNumber) {
        if (cardNumber == null || !cardNumber.matches("\\d+")) {
            return false;
        }

        int sum = 0;
        boolean isSecond = false;

        for (int i = cardNumber.length() - 1; i >= 0; i--) {
            int digit = cardNumber.charAt(i) - '0';

            if (isSecond) {
                digit *= 2;
            }

            sum += digit > 9 ? digit - 9 : digit;
            isSecond = !isSecond;
        }

        return sum % 10 == 0;
    }
}

2. 測試方法

為了確保我們的實現(xiàn)是正確的,我們可以編寫一些測試用例來驗證方法的正確性。

public class LuhnValidatorTest {

    public static void main(String[] args) {
        String[] testNumbers = {
            "4111111111111111", // Visa, valid
            "4111111111111112", // Visa, invalid
            "5500000000000004", // MasterCard, valid
            "5500000000000000", // MasterCard, invalid
            "6011000000000004", // Discover, valid
            "6011000000000000", // Discover, invalid
            "378282246310005",  // American Express, valid
            "378282246310006"   // American Express, invalid
        };

        for (String number : testNumbers) {
            System.out.println("Card Number: " + number + " is " + (LuhnValidator.isValidCardNumber(number) ? "valid" : "invalid"));
        }
    }
}

3. 運行測試

運行上述測試代碼,輸出結(jié)果如下:

Card Number: 4111111111111111 is valid
Card Number: 4111111111111112 is invalid
Card Number: 5500000000000004 is valid
Card Number: 5500000000000000 is invalid
Card Number: 6011000000000004 is valid
Card Number: 6011000000000000 is invalid
Card Number: 378282246310005 is valid
Card Number: 378282246310006 is invalid

方法補(bǔ)充

Luhn算法(也稱為模10算法)是一種簡單的校驗和算法,常用于驗證各種識別號碼,如信用卡號。以下是一個Java示例代碼,展示了如何使用Luhn算法來校驗銀行卡號的格式。

Java 示例代碼

public class LuhnAlgorithm {

    /**
     * 檢查給定的卡號是否通過Luhn算法校驗。
     *
     * @param cardNumber 卡號字符串
     * @return 如果卡號通過校驗則返回true,否則返回false
     */
    public static boolean isValidCardNumber(String cardNumber) {
        if (cardNumber == null || !cardNumber.matches("\\d+")) {
            return false;
        }

        int sum = 0;
        boolean isSecond = false;

        for (int i = cardNumber.length() - 1; i >= 0; i--) {
            int digit = cardNumber.charAt(i) - '0';

            if (isSecond) {
                digit *= 2;
            }

            sum += digit / 10;
            sum += digit % 10;

            isSecond = !isSecond;
        }

        return (sum % 10 == 0);
    }

    public static void main(String[] args) {
        String cardNumber1 = "4111111111111111"; // 測試有效的Visa卡號
        String cardNumber2 = "6011000990139424"; // 測試有效的Discover卡號
        String cardNumber3 = "1234567890123456"; // 測試無效的卡號

        System.out.println("Card Number: " + cardNumber1 + " is valid: " + isValidCardNumber(cardNumber1));
        System.out.println("Card Number: " + cardNumber2 + " is valid: " + isValidCardNumber(cardNumber2));
        System.out.println("Card Number: " + cardNumber3 + " is valid: " + isValidCardNumber(cardNumber3));
    }
}

代碼解釋

輸入驗證:首先檢查輸入的卡號是否為非空且只包含數(shù)字。如果不是,則直接返回??false??。

Luhn算法實現(xiàn)

  • 從卡號的最后一個數(shù)字開始,向前遍歷每個數(shù)字。
  • 對于每第二個數(shù)字(從右向左數(shù)),將其乘以2。
  • 如果乘以2后的結(jié)果大于9,則將其拆分為兩個數(shù)字并相加(例如,8 * 2 = 16,1 + 6 = 7)。
  • 將所有處理后的數(shù)字相加,得到總和。

校驗:如果總和能被10整除,則卡號通過Luhn算法校驗,返回??true??;否則返回??false??。

測試

在??main??方法中,我們測試了三個不同的卡號:

  • ??4111111111111111??:一個有效的Visa卡號。
  • ??6011000990139424??:一個有效的Discover卡號。
  • ??1234567890123456??:一個無效的卡號。

運行程序后,輸出結(jié)果將顯示每個卡號是否通過Luhn算法校驗。

Luhn算法(也稱為模10算法)是一種簡單的校驗和算法,用于驗證各種識別號碼,如信用卡號碼。該算法通過一個特定的公式來計算校驗位,以確保號碼的有效性。

下面是一個使用Java實現(xiàn)的Luhn算法示例,用于驗證銀行卡卡號是否有效:

Java代碼實現(xiàn)

public class LuhnAlgorithm {

    /**
     * 驗證卡號是否有效
     *
     * @param cardNumber 卡號字符串
     * @return 如果卡號有效返回true,否則返回false
     */
    public static boolean isValid(String cardNumber) {
        if (cardNumber == null || !cardNumber.matches("\\d+")) {
            return false;
        }

        int sum = 0;
        boolean isSecond = false;

        for (int i = cardNumber.length() - 1; i >= 0; i--) {
            int digit = cardNumber.charAt(i) - '0';

            if (isSecond) {
                digit *= 2;
            }

            sum += digit > 9 ? digit - 9 : digit;
            isSecond = !isSecond;
        }

        return sum % 10 == 0;
    }

    public static void main(String[] args) {
        String cardNumber = "4111111111111111"; // 測試卡號
        boolean isValid = isValid(cardNumber);
        System.out.println("Card number " + cardNumber + " is " + (isValid ? "valid" : "invalid"));
    }
}

代碼解釋

1.輸入驗證?if (cardNumber == null || !cardNumber.matches("\\d+"))??:首先檢查輸入的卡號是否為非空且只包含數(shù)字。

2.初始化變量

  • ??int sum = 0??:用于存儲所有數(shù)字的總和。
  • ??boolean isSecond = false??:用于標(biāo)記當(dāng)前處理的數(shù)字是否是偶數(shù)位置的數(shù)字(從右向左計數(shù))。

3.遍歷卡號

  • ??for (int i = cardNumber.length() - 1; i >= 0; i--)??:從卡號的最后一個字符開始向前遍歷。
  • ??int digit = cardNumber.charAt(i) - '0'??:將當(dāng)前字符轉(zhuǎn)換為整數(shù)。
  • ??if (isSecond)??:如果當(dāng)前數(shù)字是偶數(shù)位置的數(shù)字,則將其乘以2。
  • ??sum += digit > 9 ? digit - 9 : digit??:如果乘以2后的數(shù)字大于9,則減去9后再加到總和中,否則直接加到總和中。
  • ??isSecond = !isSecond??:切換??isSecond??標(biāo)志,以便下一次處理奇數(shù)位置的數(shù)字。

4.校驗結(jié)果:??return sum % 10 == 0??:如果總和能被10整除,則卡號有效,否則無效。

5.測試

  • ??String cardNumber = "4111111111111111"??:測試卡號。
  • ??boolean isValid = isValid(cardNumber)??:調(diào)用??isValid??方法驗證卡號。
  • ??System.out.println("Card number " + cardNumber + " is " + (isValid ? "valid" : "invalid"))??:輸出驗證結(jié)果。

這個實現(xiàn)簡單明了,適用于大多數(shù)需要驗證銀行卡號有效性的場景。

到此這篇關(guān)于Java基于Luhn算法實現(xiàn)銀行卡卡號格式校驗詳解的文章就介紹到這了,更多相關(guān)Java銀行卡卡號格式校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中Arrays工具類的一些常見方法總結(jié)

    Java中Arrays工具類的一些常見方法總結(jié)

    在Java中Arrays類是一個實用工具類,用于在數(shù)組上執(zhí)行各種操作,包括排序、搜索、比較等,這篇文章主要給大家介紹了關(guān)于Java中Arrays工具類的一些常見方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • spring boot之SpringApplication 事件監(jiān)聽

    spring boot之SpringApplication 事件監(jiān)聽

    這篇文章主要介紹了spring boot之SpringApplication 事件監(jiān)聽,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • springboot項目中jackson-序列化-處理 NULL教程

    springboot項目中jackson-序列化-處理 NULL教程

    這篇文章主要介紹了springboot項目中jackson-序列化-處理 NULL教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解

    Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解

    這篇文章主要介紹了Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解,RocketMQ是一個分布式具有高度可擴(kuò)展性的消息中間件,本文旨在探索在broker端,生產(chǎn)端,以及消費端是如何做到橫向擴(kuò)展以及負(fù)載均衡的,需要的朋友可以參考下
    2024-01-01
  • SpringBoot對不同Bean注解的區(qū)別和使用場景說明

    SpringBoot對不同Bean注解的區(qū)別和使用場景說明

    這篇文章主要介紹了SpringBoot對不同Bean注解的區(qū)別和使用場景說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring?Boot?結(jié)合?WxJava?實現(xiàn)文章上傳微信公眾號草稿箱與群發(fā)

    Spring?Boot?結(jié)合?WxJava?實現(xiàn)文章上傳微信公眾號草稿箱與群發(fā)

    本文將詳細(xì)介紹如何使用SpringBoot框架結(jié)合WxJava開發(fā)工具包,實現(xiàn)文章上傳到微信公眾號草稿箱以及群發(fā)功能,感興趣的朋友一起看看吧
    2025-07-07
  • SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實現(xiàn)

    SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實現(xiàn)

    這篇文章主要介紹了SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java Hibernate使用方法及整合查詢

    Java Hibernate使用方法及整合查詢

    這篇文章主要介紹了Java使用與整合Hibernate,在正式進(jìn)入Hibernate的高級應(yīng)用之前,需要了解聲明是數(shù)據(jù)模型與領(lǐng)域模型,這兩個概念將會幫助我們更好的理解實體對象的關(guān)聯(lián)關(guān)系映射
    2023-04-04
  • Java設(shè)計模式之適配器模式的示例詳解

    Java設(shè)計模式之適配器模式的示例詳解

    適配器模式,即將某個類的接口轉(zhuǎn)換成客戶端期望的另一個接口的表示,主要目的是實現(xiàn)兼容性,讓原本因為接口不匹配,沒辦法一起工作的兩個類,可以協(xié)同工作。本文將通過示例詳細(xì)介紹適配器模式,需要的可以參考一下
    2022-02-02
  • 為什么在foreach循環(huán)中JAVA集合不能添加或刪除元素

    為什么在foreach循環(huán)中JAVA集合不能添加或刪除元素

    今天給大家?guī)淼奈恼率顷P(guān)于Java的相關(guān)知識,文章圍繞著為什么在foreach循環(huán)中JAVA集合不能添加或刪除元素展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06

最新評論

喀喇| 阜城县| 白玉县| 三原县| 姜堰市| 威远县| 平定县| 宁乡县| 名山县| 大兴区| 景东| 忻州市| 长沙市| 保康县| 黄龙县| 林周县| 噶尔县| 沙湾县| 保德县| 吴堡县| 武安市| 新源县| 城口县| 南雄市| 桂东县| 甘泉县| 莱州市| 新田县| 合川市| 岳池县| 讷河市| 锦屏县| 开化县| 河津市| 灵璧县| 万年县| 秭归县| 乐业县| 西城区| 镇赉县| 鹤峰县|