银行卡校验

可以用于前端需要用户输入银行卡时做初步校验

银行卡号码的校验采用Luhn算法,校验过程大致如下:

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

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

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

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

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

% 取模 - 返回除法的余数
*= 乘法赋值运算符 c = a 等效于 c = c a
// 取整除 - 返回商的整数部分(向下取整)

使用Python实现

def luhn(card_num):s = 0card_num_length = len(card_num)for _ in range(1, card_num_length + 1):t = int(card_num[card_num_length - _])print("当前银行卡对应数字t={}".format(t))print("当前_为{}".format(_))print("_取模{}".format(_ % 2))if _ % 2 == 0:print("当前是偶数位")t *= 2print("t={}".format(t))s += t if t < 10 else t % 10 + t // 10else:print("当前为奇数位")s += tprint("s={}".format(s))return s % 10 == 0if __name__ == '__main__':print(luhn('6226095711989751'))

执行结果:

当前银行卡对应数字t=1
当前_为1
_取模1
当前为奇数位
s=1当前银行卡对应数字t=5
当前_为2
_取模0
当前是偶数位
t=10
s=2......当前银行卡对应数字t=6
当前_为16
_取模0
当前是偶数位
t=12
s=70True

参考来源:
https://www.cnblogs.com/cc11001100/p/9357177.html

百度百科介绍Luhn算法

我们以数字“7992739871”为例,计算其校验位:
从校验位开始,从右往左,偶数位乘2(例如,7*2=14),然后将两位数字的个位与十位相加(例如,10:1+0=1,14:1+4=5);
把得到的数字加在一起(本例中得到67);
将数字的和取模10(本例中得到7),再用10去减(本例中得到3),得到校验位。
Python实现

def checkLuhn(purportedCC=''):sum_ = 0parity = len(purportedCC) % 2for i, digit in enumerate([int(x) for x in purportedCC]):if i % 2 == parity:digit *= 2if digit > 9:digit -= 9sum_ += digitreturn sum_ % 10 == 0

转载于:https://blog.51cto.com/dzm911/2377809

银行卡号码的校验规则(Luhn算法/模10算法)相关推荐

  1. c语言luhn算法生成校验位,银行卡号码校验算法(Luhn算法,又叫模10算法)

    本文最后更新于2019-10-27,已超过 1年没有更新,如果文章内容.图片或者下载资源失效,请留言反馈,我会及时处理,谢谢! 温馨提示:本文共1927个字,读完预计5分钟. 有时候在网上办理一些业务 ...

  2. 银行卡校验规则(Luhn算法)

       当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过. 该校验的过程: 1.从卡号最后一位数字 ...

  3. 银行卡号校验位的LUHN算法模10“隔位2倍加”校验数的公式

    银联卡卡号由三部分组成:发卡机构标识码(bin).发卡机构自定义位.校验码.其中,卡号左起前六位是发卡机构标识代码(BIN),由6位数字组成.BIN号由中国银联复制分配.确认和管理:卡号第七位起事发卡 ...

  4. 身份证号码的编码规则及校验

    前言 本文内容适用于二代身份证,如无特殊说明,本文中所说的身份证皆指二代身份证. 笔者目前使用的jdk版本是1.6.0_29,Eclipse版本是Juno Release,Build id 20120 ...

  5. 银行卡四元素校验API 验证姓名手机号码身份证号码银行卡号是否一致

    银行卡四元素校验API,检测输入的姓名.手机号码.身份证号码.银行卡号是否一致.通过https://www.juhe.cn/docs/api/id/213申请APPKEY 1.银行卡四元素检测 接口地 ...

  6. python身份证号码正则表达式校验(含最后一位的校验值规则)

    这里是java版本的:https://yanwenjing.blog.csdn.net/article/details/76066985 请仔细阅读注释 点击这里下载判断身份证号码的小工具 身份证号码 ...

  7. java身份证号码正则表达式校验(含最后一位的校验值规则)

    这里是python版本的: https://yanwenjing.blog.csdn.net/article/details/108210623 请仔细阅读注释 点击这里下载判断身份证号码的小工具 身 ...

  8. 输入银行卡号码正确性验证

    输入银行卡号码 分类: 蓝桥杯软件大赛编程题2013-06-19 12:45 186人阅读 评论(0) 收藏 举报 [java] view plaincopy package cn.dlpu.lby; ...

  9. C语言——实验一:查验身份证(身份证号码的校验码)

    前言 为什么我这个萌新要来写这篇文章?事情还要从上周三说起. 在上周三的程序设计基础课上,我们老师给我们全班同学布置了一项题为<实验一:查验身份证>的实验作业,这也是我第一次接触到实验作业 ...

  10. Java实现校验身份证号码(校验码位)

    一.原理 参考文件:http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=080D6FBF2BB468F9007657F26D60013E. 实现 ...

最新文章

  1. jMonkey Engine SDK3 中文乱码问题
  2. java debug体系为什么不能debug到jdk里所有的代码
  3. ./src/cuda.c:36: check_error: Assertion `0‘ failed
  4. 使用next_permutation()的坑,你中招了么?
  5. js reduce实现中间件_实现redux中间件-洋葱模型
  6. python逻辑运算符or的短路求值特性_[Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑...
  7. mysql技术内幕《读书笔记》
  8. zabbix2.2升级到zabbix3.0.2
  9. 重温6 ListView相关|单位dp/sp
  10. HTTPS 协议到底比 HTTP 协议多些什么?
  11. python字符串相加_谁说python字符串相加效率低
  12. oracle 常见错误
  13. 20、在Linux中实现类似windows中获取配置文件的函数GetProfileString
  14. php 余额冻结设计_加密货币交易所:微服务架构设计
  15. android 代码操作.db demo,Android实现商品展示效果
  16. windows下使用endless报错:undefined: syscall.SIGUSR1
  17. 大话设计模式(Java代码)
  18. 【毕业设计】基于SSM实现酒店管理系统(论文+源码+ppt+视频)
  19. hduoj 1874 畅通工程续(Floyd)
  20. 无偏性 VS 一致性

热门文章

  1. 使用python将excel单元格中指定文字加粗标红
  2. 切西瓜:把一个西瓜切9刀
  3. gpio引脚介绍 树莓派3b_树莓派4的GPIO接口介绍
  4. CCIE实验笔记之---第1章WAN协议(HDLC)
  5. 概率论在实际生活的例子_日常生活中的概率统计
  6. javaweb实现个人博客系统
  7. RocketMq 启动报错错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_301\jre\lib\ext
  8. 思科C2960交换机的默认网关
  9. IM学习-认识即时通讯IM(一)
  10. 从修复 testerhome(rubychina)网站的一个 bug 学习 rubyrails on ruby