专栏首页云时之间CV学习笔记(二十二):卡号格式化匹配

CV学习笔记(二十二):卡号格式化匹配

在后续完成了银行卡的识别之后,现在可以进行卡号核验和格式化的工作了,这些工作虽然没有之前的那么复杂,但是还是比较繁琐的。

一:卡号检测

来判断银行卡(储蓄卡,信用卡)的卡号的合法性我们用到了Luhn算法

算法流程如下:

1. 从右到左给卡号字符串编号,最右边第一位是1,最右边第二位是2,最右边第三位是3….

2. 从右向左遍历,对每一位字符t执行第三个步骤,并将每一位的计算结果相加得到一个数s。

3. 对每一位的计算规则:如果这一位是奇数位,则返回t本身,如果是偶数位,则先将t乘以2得到一个数n,如果n是一位数(小于10),直接返回n,否则将n的个位数和十位数相加返回。

4. 如果s能够整除10,则此号码有效,否则号码无效。

因为最终的结果会对10取余来判断是否能够整除10,所以又叫做模10算法。

算法代码:

def luhn_checksum(card_number):
    def digits_of(n):
        return [int(d) for d in str(n)]
    digits = digits_of(card_number)
    odd_digits = digits[-1::-2]
    even_digits = digits[-2::-2]
    checksum = 0
    checksum += sum(odd_digits)
    for d in even_digits:
    return checksum % 10
def is_luhn_valid(card_number):
    return luhn_checksum(card_number) == 0       

二:BIN码校验

银行卡号一般是13-19位组成,国内一般是16,19位,其中16位为信用卡,19位为储蓄卡,通常情况下都是由“卡BIN+发卡行自定位+校验位”这三部分构成,

银行卡的前6位用来识别发卡银行或者发卡机构的,称为发卡行识别码,简称为卡BIN。拿出钱包里的卡,会发现如果是只带有银联标注的卡,十有八九都是以62开头的,但是也有例外。

这里边包含一个坑:你知道Bin码的规则,但是你不知道国内银行的BIN码,网上的也大都不全,只能以后慢慢人工扩充。

我这边整理了一份,但是也不全,大概包含有1300个BIN号,以后再慢慢整理

只需要将合法的卡号前6位切片出来进行查询就好了。

文件地址:

链接:https://pan.baidu.com/s/1jnfITxIe5KMpwzLCMhbz0Q

提取码:ywud

三:模型上线

为了让模型快速上线,我用的是flask框架,然后返回一个json格式,还是比较方便的,这里推荐使用Postman来检测你的页面的合法性,在《软件测试技术大全》一书中,有个说法:

响应时间在4秒以内,大部分用户可以接受;

4~9秒以内,30%的用户选择离开;

8~9秒,则有60%的用户选择离开;

超过10秒,则90%以上的用户选择离开。​

现在我的访问时间是3-6s,视网络情况不等,仍有很多地方需要优化,比如模型载入,代码耦合,特殊情况下的识别准确率等等,以及一些功能上的缺失,比如卡号有效期的识别等,这些地方仍需要不断地改进。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深度学习的fine-tuning过程

    在深度学习过程中,获取数据集后,在搭建自己的网络之前需要进行的是微调,通过别人现有的网络观察自己数据的实验结果,并在此基础上,初步确定自己网络的大体结构,其中微...

    云时之间
  • 什么是检验神经网络?

    各位小伙伴们大家好,今天让我们聊聊在做好了自己的神经网络以后来如何评价自己的神经网络的并且如何从评价当中如何改进我们的神经网络。 其实评价神经网络的方法和评价其...

    云时之间
  • 机器学习常用算法分类(2)

    感谢大家的关注,在上一篇文章中发布后很多热心的小伙伴建议我可以改进下分类的方式,一种是根据学习的方式分类,另外一种是根据类似的形式或者功能进行分类,我几天一直在...

    云时之间
  • 理解静态绑定与动态绑定

    一个Java 程序要经过编写、编译、运行三个步骤,其中编写代码不在我们讨论的范围之内,那么我们的重点自然就放在了编译 和 运行这两个阶段,由于编译和运行阶段过程...

    cxuan
  • 《深入理解Java虚拟机》的思维导图读书笔记

    作者:被称为L的男人 链接:http://www.jianshu.com/p/ff4a1795e462 本文为转载文章,原文请点击左下角查看,谢谢。 说明 本篇...

    java思维导图
  • SpringMVC:数据绑定入门(-)

    1.数据类型,可以绑定基本数据类型,如int age,或者包装类型如:Integer age;

    Dar_Alpha
  • 《IT男1-10分打分标准》出炉,你是哪类IT男?

    《IT男1-10分打分标准》出炉,10分男简直是神话级别,快来看看自己属于哪个等级吧!!

    java进阶架构师
  • 用Android Studio调试Framework层代码

    felix
  • QML教程-属性绑定与赋值

    Qt君
  • WPF 笔刷绑定不上可能的原因

    在 WPF 中如背景色等都是使用笔刷,在使用绑定的时候可能绑定不上,本文告诉大家绑定不上可能的原因和调试方法

    林德熙

扫码关注云+社区

领取腾讯云代金券