怎么使用 Python 校验银行卡号码是否有效

简介: 最近在公司有一个 fakedata 的项目,用来生成各类假数据,在各种测试环境,其中就有银行卡卡号的生成。简单来说,就是国内的银行卡卡号,主要都是银联标准,然后前面的4-8位称之为卡 bin,这个卡 bin 是可以区分是具体哪个银行,以及是否是借记卡还是贷记卡(信用卡),关键是最后一位校验位。

最近在公司有一个 fakedata 的项目,用来生成各类假数据,在各种测试环境,其中就有银行卡卡号的生成,中国这方面是有自己的标准的,详细的介绍可以参考这篇文章,写的很清楚。

简单来说,就是国内的银行卡卡号,主要都是银联标准,然后前面的4-8位称之为卡 bin,这个卡 bin 是可以区分是具体哪个银行,以及是否是借记卡还是贷记卡(信用卡),关键是最后一位校验位。

从校验卡号的角度来说,可以在应用的尽量前端进行判断,如果卡号校验错误,就不用去进行四要素判断,更不能进行实际的账户交易了。校验码对了,再根据卡 bin 判断是什么银行和什么性质的银行卡(这个下次再说)。

这里只讨论银行卡号码本身的合法性,并不是通常意义说的三要素四要素银行卡和身份证的校验。

def get_bankcard_checkcode(card_number_str):
    """
    计算银行卡校验位;

    :param:
        * card_number_str: (string) 要查询的银行卡号
    :returns:
        checkcode: (string) 银行卡的校验位

    举例如下::

        from fishbase.fish_data import *

        print('--- fish_data get_bankcard_checkcode demo ---')

        # 不能放真的卡信息,有风险
        print(get_bankcard_checkcode('439188000699010'))

        print('---')

    输出结果::

        --- fish_data get_bankcard_checkcode demo ---
        9
        ---

    """
    total = 0
    even = True

    for item in card_number_str[-1::-1]:
        item = int(item)
        if even:
            item <<= 1
        if item > 9:
            item -= 9
        total += item
        even = not even

    checkcode = (10 - (total % 10)) % 10

    return str(checkcode)

实际算法部分不算复杂,参考了一些网上看到的资料。需要的朋友可以借鉴。

代码还在不断优化中,可以参考我们的 Python 工具函数包 fishbase :

源代码:https://github.com/chinapnr/fishbase
文档:https://fishbase.readthedocs.io/en/latest/
pypi :https://pypi.org/project/fishbase/

目录
相关文章
|
3天前
|
存储 文字识别 计算机视觉
【python版CV】- 银行卡号识别项目
【python版CV】- 银行卡号识别项目
522 0
|
3天前
|
人工智能 API 数据安全/隐私保护
oauthlib,一个强大的 Python 身份校验库!
oauthlib,一个强大的 Python 身份校验库!
25 1
|
3天前
|
计算机视觉 Python
怎么使用Python轻松打造淘宝主图视频生成神器
怎么使用Python轻松打造淘宝主图视频生成神器
51 0
|
7月前
|
Python
21.10 Python 使用CRC32校验文件
CRC文件校验是一种用于验证文件完整性的方法,通过计算文件的`CRC`值并与预先计算的`CRC`校验值进行比较,来判断文件是否发生变化,此类功能可以用于验证一个目录中是否有文件发生变化,如果发生变化则我们可以将变化打印输出,该功能可用于实现对特定目录的验证。
66 0
21.10 Python 使用CRC32校验文件
|
8月前
|
定位技术 API Python
python 爬取餐厅的商户联系人公开号码,连续爬5页,实例脚本
python 爬取餐厅的商户联系人公开号码,连续爬5页,实例脚本
|
10月前
|
JSON 数据格式
14-Python-对比校验神器-deepdiff库
14-Python-对比校验神器-deepdiff库
|
机器学习/深度学习 数据采集 算法
02 放大招,Python预测8月22号双色球号码!
02 放大招,Python预测8月22号双色球号码!
|
vr&ar 计算机视觉 Python
如何用python识别银行卡号--详细教程
如何用python识别银行卡号--详细教程
231 0
|
数据安全/隐私保护 Python
Python:Werkzeug.security对密码进行加密和校验
Python:Werkzeug.security对密码进行加密和校验
126 0