银行卡号校验 Java 实现

1. 流程概述

银行卡号校验的主要目的是验证银行卡号是否有效和合法。在 Java 中,我们可以通过一系列的步骤来实现银行卡号校验。下面是整个流程的步骤概述:

步骤 描述
1. 输入 获取用户输入的银行卡号
2. 去除空格 去除银行卡号中的空格,以便后续处理
3. 格式校验 检查银行卡号的格式是否符合要求,一般是通过正则表达式进行匹配验证
4. 长度校验 校验银行卡号的长度是否符合标准,不同的银行卡号长度可能有所不同
5. Luhn 算法校验 使用 Luhn 算法校验银行卡号的合法性
6. 结果输出 输出校验结果,告知用户银行卡号是否有效

接下来,我会逐步解析每个步骤需要做的事情,并提供对应的代码实现。

2. 代码实现

2.1 输入银行卡号

首先,我们需要从用户处获取银行卡号。可以使用 Java 的 Scanner 类来实现。

import java.util.Scanner;

public class BankCardValidation {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("请输入银行卡号:");
        String bankCardNumber = scanner.nextLine();
        
        // 后续步骤...
    }
}

以上代码中,我们使用 Scanner.nextLine() 方法获取用户输入的银行卡号,并存储在 bankCardNumber 变量中。

2.2 去除空格

在进行格式和长度校验之前,我们需要先去除银行卡号中的空格。可以使用 Java 的 String 类的 replaceAll() 方法来实现。

String formattedBankCardNumber = bankCardNumber.replaceAll("\\s", "");

以上代码中,我们使用正则表达式 "\\s" 来匹配空格,并使用空字符串 "" 进行替换,从而去除银行卡号中的空格。

2.3 格式校验

银行卡号通常有一定的格式要求,可以通过正则表达式来进行验证。以下是一个简单的正则表达式示例,你可以根据实际情况进行修改。

boolean isValidFormat = formattedBankCardNumber.matches("^\\d{16}$");

以上代码中,我们使用 matches() 方法来匹配银行卡号是否符合指定的格式。正则表达式 "^\\d{16}$" 表示银行卡号必须为 16 位数字。

2.4 长度校验

除了格式要求,银行卡号的长度也需要进行校验。以下是一个示例,你可以根据实际情况进行修改。

boolean isValidLength = formattedBankCardNumber.length() == 16;

以上代码中,我们通过 length() 方法获取银行卡号的长度,并与 16 进行比较,判断是否符合要求。

2.5 Luhn 算法校验

Luhn 算法是一种常用的银行卡号合法性校验算法。以下是 Luhn 算法的实现代码:

boolean isValidLuhn = false;

if (formattedBankCardNumber.length() == 16) {
    int sum = 0;
    boolean alternate = false;
    
    for (int i = formattedBankCardNumber.length() - 1; i >= 0; i--) {
        int digit = Integer.parseInt(formattedBankCardNumber.substring(i, i + 1));
        
        if (alternate) {
            digit *= 2;
            
            if (digit > 9) {
                digit = (digit % 10) + 1;
            }
        }
        
        sum += digit;
        alternate = !alternate;
    }
    
    isValid