Python 使用正则表达式验证银行账号

Python 使用正则表达式验证银行账号

在日常生活中,我们经常需要对一些银行账号进行校验,以确保其格式和位数符合标准,避免出现错误和安全问题。在 Python 中,我们可以使用正则表达式来进行银行账号的验证,提高代码的可读性和效率。

正则表达式的基本语法

正则表达式是一种用来描述字符串模式的语法,可以用于匹配、查找、替换等操作。在 Python 中,我们可以使用 re 模块来进行正则表达式的操作。

下面是一些常用的正则表达式的基本语法:

字符 描述
. 匹配任意字符,除了换行符
\w 匹配字母、数字、下划线、汉字
\s 匹配空白字符,包括空格、制表符、换行符等
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结束
* 匹配前面的字符 0 次或多次
+ 匹配前面的字符 1 次或多次
? 匹配前面的字符 0 次或 1 次
{n} 匹配前面的字符恰好 n 次
{n,} 匹配前面的字符至少 n 次
{n,m} 匹配前面的字符至少 n 次,最多 m 次
[…] 匹配字符集中的任意一个字符
[^…] 匹配除字符集中的任意一个字符外的任意一个字符
(x|y) 匹配 x 或 y
\ 转义特殊字符
\A 匹配字符串的开始,和 ^ 功能相同
\Z 匹配字符串的结束,和 $ 功能相同
\b 匹配单词的边界
\B 匹配非单词的边界
(?P<name>...) 匹配 … 并且将结果命名为 name,可以使用 group(name) 获取结果

在 Python 中,我们可以通过构造正则表达式对象,然后调用其方法来进行正则表达式的匹配。常用的方法包括:

方法 描述
compile(pattern,flags) 编译正则表达式,生成正则表达式对象,可以调用其方法进行匹配
match(pattern,string) 从字符串的起始位置开始匹配,返回匹配的结果对象
search(pattern,string) 在字符串中搜索匹配,返回第一个匹配的结果对象
findall(pattern,string) 查找字符串中所有匹配的字符串,返回一个列表
sub(pattern,repl,string) 在字符串中替换匹配的字符串

银行账号的验证规则

在进行银行账号的验证时,我们需要了解其特定的位数和格式规则。下面是一些常用的银行账号验证规则:

银行名称 格式 位数
中国工商银行 常规卡号为19位,以62开头 19位
中国建设银行 常规卡号为16位,以62开头 16位
中国农业银行 常规卡号为19位,以62开头 19位
中国银行 常规卡号为19位,以62开头 19位
交通银行 常规卡号为19位,以62开头 19位
中信银行 常规卡号为16位或19位,15开头 16位或19位
招商银行 常规卡号为16或19位 16或19位
广发银行 常规卡号为16或19位 16或19位
中国民生银行 常规卡号为19位,以62开头 19位
中国光大银行 常规卡号为16位或19位 16或19位
华夏银行 常规卡号为16位或19位,以62开头 16或19位
浦发银行 常规卡号为19位,以62开头 19位
兴业银行 常规卡号为16或19位 16或19位
中国邮政储蓄银行 普通活期存折8位,以10,20,30,62开头;储蓄卡号16位,以62开头 8位或16位
中国人民银行财务司银行卡 以62开头,10位或19位 10位或19位

Python 中的银行账号验证代码

下面是在 Python 中实现银行账号验证的示例代码:

import re

def validate_bank_account(bank_name, account_number):
    pattern_dict = {
        "中国工商银行": "^62\d{17}",
        "中国建设银行": "^62\d{13}",
        "中国农业银行": "^62\d{17}",
        "中国银行": "^62\d{17}",
        "交通银行": "^62\d{17}",
        "中信银行": "^(15\d{14}|62\d{16,17})",
        "招商银行": "^(62\d{15}|\d{18})",
        "广发银行": "^(62\d{15}|\d{18})",
        "中国民生银行": "^62\d{17}",
        "中国光大银行": "^(62\d{15}|\d{18})",
        "华夏银行": "^(62\d{15}|\d{18})",
        "浦发银行": "^62\d{17}",
        "兴业银行": "^(62\d{15}|\d{18})",
        "中国邮政储蓄银行": "^(10|20|30|62)\d{6}|^\d{16}",
        "中国人民银行财务司银行卡": "^62\d{8}|^62\d{17}$"
    }
    pattern = pattern_dict.get(bank_name, None)
    if pattern:
        return bool(re.match(pattern, account_number))
    else:
        return False

在上面的代码中,我们首先定义了一个 validate_bank_account 函数,它接受一个银行名称和账号作为参数。然后,我们使用字典来存储每个银行的正则表达式模式,并根据银行名称获取对应的模式。最后,我们通过调用 re.match 方法来进行银行账号的匹配,并返回匹配结果的布尔值。

调用示例

下面是使用上述函数实现银行账号验证的示例代码:

# 定义一个银行账号验证测试函数
def test_validate_bank_account():
    test_data = [
        ("中国工商银行", "6200000000000000000", True),  # 正常 19 位卡号
        ("中国建设银行", "6235000000000000", True),  # 正常 16 位卡号
        ("中国农业银行", "6228480000000000000", True),  # 正常 19 位卡号
        ("中国银行", "6217000000000000000", True),  # 正常 19 位卡号
        ("交通银行", "6222600000000000000", True),  # 正常 19 位卡号
        ("中信银行", "6221550000000000000", True),  # 正常 16 位卡号
        ("中信银行", "6200000000000000000", True),  # 正常 19 位卡号
        ("招商银行", "622580000000000000", True),  # 正常 16 位卡号
        ("招商银行", "6200000000000000000", True),  # 正常 19 位卡号
        ("广发银行", "6230580000000000000", True),  # 正常 16 位卡号
        ("广发银行", "6200000000000000000", True),  # 正常 19 位卡号
        ("中国民生银行", "6214990000000000000", True),  # 正常 19 位卡号
        ("中国光大银行", "6226270000000000000", True),  # 正常 16 位卡号
        ("中国光大银行", "6200000000000000000", True),  # 正常 19 位卡号
        ("华夏银行", "6226360000000000000", True),  # 正常 16 位卡号
        ("华夏银行", "6200000000000000000", True),  # 正常 19 位卡号
        ("浦发银行", "6225210000000000000", True),  # 正常 19 位卡号
        ("兴业银行", "6229090000000000000", True),  # 正常 16 位卡号
        ("兴业银行", "6200000000000000000", True),  # 正常 19 位卡号
        ("中国邮政储蓄银行", "1030000000000000", True),  # 正常 8 位卡号
        ("中国邮政储蓄银行", "6221880000000000000", True),  # 正常 16 位卡号
        ("中国人民银行财务司银行卡", "62104502000139129", True),  # 正常 19 位卡号
        ("中国人民银行财务司银行卡", "6230580000032262396", True),  # 正常 19 位卡号
        ("未知银行", "1234567890123456", False),  # 错误的卡号
    ]
    for bank_name, account_number, is_valid in test_data:
        assert validate_bank_account(bank_name, account_number) == is_valid

# 调用测试函数
test_validate_bank_account()

在上面的测试函数中,我们定义了一个 test_validate_bank_account 函数,用来测试 validate_bank_account 函数的正确性。我们将不同的银行名称和账号组成的元组构成一个测试数据集合,并使用 assert 语句来检查 validate_bank_account 函数的返回值是否正确。

结论

通过上述的 Python 示例代码,我们可以看到,使用正则表达式在 Python 中验证银行账号可以方便快捷地完成。因此,在进行银行账号的验证时,我们可以利用 Python 中的 re 模块和正则表达式,来实现严格的验证,并避免错误和安全隐患的出现。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程