银行卡号校验 Luhm 算法

银行卡号校验是在进行银行卡交易时非常重要的一环,银行通常会使用 Luhm 算法对银行卡号进行校验,以确保输入的银行卡号的合法性。本文将介绍 Luhm 算法的原理以及如何用 Java 代码实现银行卡号的校验。

Luhm 算法原理

Luhm 算法,又称为模数 10 算法,是一种校验算法,用于验证一串数字是否合法。在银行卡校验中,Luhm 算法计算银行卡号的校验位,通过对银行卡号的每一位数字进行加权求和并取模 10 进行校验,从而检测输入的银行卡号是否有误。

Luhm 算法的具体步骤如下:

  1. 从银行卡号的最后一位数字开始,逆序将每一位数字加权求和,即将奇数位数字乘以 2,如果乘以 2 后的数字大于 9,则减去 9。
  2. 将所有数字相加得到总和。
  3. 如果总和能被 10 整除,则校验通过,否则校验失败。

Java 实现

下面是用 Java 代码实现银行卡号校验的示例:

public class LuhmAlgorithm {

    public static boolean validateBankCard(String cardNumber) {
        int sum = 0;
        boolean alternate = false;
        for (int i = cardNumber.length() - 1; i >= 0; i--) {
            int n = Integer.parseInt(cardNumber.substring(i, i + 1));
            if (alternate) {
                n *= 2;
                if (n > 9) {
                    n = n - 9;
                }
            }
            sum += n;
            alternate = !alternate;
        }
        return sum % 10 == 0;
    }

    public static void main(String[] args) {
        String cardNumber = "1234567890123452";
        if (validateBankCard(cardNumber)) {
            System.out.println("银行卡号校验通过");
        } else {
            System.out.println("银行卡号校验失败");
        }
    }
}

在上面的示例中,我们定义了一个名为 validateBankCard 的方法,用于对银行卡号进行 Luhm 算法校验。在 main 方法中,我们输入一个银行卡号并调用 validateBankCard 方法进行校验,最终输出校验结果。

示例

下面是一个使用 Luhm 算法校验银行卡号的示例过程:

journey
    title 银行卡号校验示例

    section 输入银行卡号
        participant 用户
        participant 程序

        用户 -> 程序: 输入银行卡号"1234567890123452"

    section 校验银行卡号
        participant 程序

        程序 -> 程序: 逆序加权求和
        程序 -> 程序: 计算总和
        程序 --> 用户: 输出校验结果"银行卡号校验通过"

结语

通过本文的介绍,我们了解了 Luhm 算法的原理以及如何用 Java 代码实现银行卡号的校验。银行卡号校验在银行交易中起着重要的作用,能够有效减少输入错误带来的风险。希望本文能够对你有所帮助,谢谢阅读!