/* 采用 Luhm 校验方法计算:

1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2

2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字

3,将加法和加上校验位能被 10 整除。

*/

function luhm($s) {

$n = 0;

for ($i = strlen($s); $i >= 1; $i--) {

$index=$i-1;

//偶数位

if ($i % 2==0) {

$n += $s{$index};

} else {//奇数位

$t = $s{$index} * 2;

if ($t > 9) {

$t = (int)($t/10) + $t%10;

}

$n += $t;

}

}

return ($n % 10) == 0;

}

网上盛传一个采用Luhm校验方法对银行卡卡号进行效验的函数,据笔者测试发现,该函数只能效验16位银行卡卡号,无法效验19位的银行卡卡号,能够效验19位银行卡卡号的函数经笔者整理如下:

function luhm($bankNo) {

// 奇数之和

$sumOdd = 0;

// 偶数之和

$sumEven = 0;

// 长度

$length = strlen($bankNo);

$wei = [];

for ($i = 0; $i < $length; $i++) {

$wei[$i] = substr($bankNo, $length - $i - 1, 1);// 从最末一位开始提取,每一位上的数值

}

for ($i = 0; $i < $length / 2; $i++) {

$sumOdd += $wei[2 * $i];

if(!isset($wei[2 * $i + 1])) continue;// 如果为19位卡号,要防止报Notice: Undefined offset错误

if (($wei[2 * $i + 1] * 2) > 9)

$wei[2 * $i + 1] = $wei[2 * $i + 1] * 2 - 9;

else

$wei[2 * $i + 1] *= 2;

$sumEven += $wei[2 * $i + 1];

}

if (($sumOdd + $sumEven) % 10 == 0) {

return true;

} else {

return false;

}

}

php如何验证银行卡号,PHP效验银行卡卡号相关推荐

  1. 银行卡三元素检测 根据姓名+身份证号+银行卡卡号验证信息是否匹配

    银行卡检测api,根据姓名+身份证号+银行卡卡号验证信息是否匹配. 接口名称:银行卡检测api 接口平台:聚合数据 接口地址:http://v.juhe.cn/verifybankcard3/quer ...

  2. 银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...

    编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62" ...

  3. 前端JS校验银行卡卡号和身份证号码(附ES6版方法)

    1.银行卡卡号校验方法. function luhnCheck(bankno) { var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一 ...

  4. Python+OpenCV 识别银行卡卡号

    Python+OpenCV 识别银行卡卡号 今天尝试一下用python+OpenCV,使用模板匹配的方式做个简单地识别银行卡卡号(大部分参考网上的,自己改了一部分,代码写的有点不太好,但是思路很清晰, ...

  5. 银行卡卡号格式规范 每隔4为一个空格

    最近涉及到一个绑定银行卡的需求,需要格式化银行卡卡号.即:每隔4为做一个空格. 一个很简单的功能,大牛请自动忽略... 做个笔记O(∩_∩)O哈! bankCardNoEditTxt.addTextC ...

  6. 基于Python的Opencv 自动识别银行卡卡号系统

    一. 摘要 此应用功能为自动识别并获取银行卡卡号,通过导入需要识别的银行卡图片,以及跟银行卡上卡号的数字相一致的数字模型,则可以成功实现识别并获取银行卡卡号的功能.如果你对此感兴趣的话,下面将会详细介 ...

  7. 学习Opencv+Python之银行卡卡号识别

    学习Opencv+Python之银行卡卡号识别 思路: 获取模板轮廓 获取模板中每个数字的轮廓 获取银行卡卡号轮廓 分别提取卡号中的每个数字的轮廓 对比识别 代码: # 导入工具包 from imut ...

  8. appium使用sendkeys输入银行卡卡号(每4个数字自动空一格)总是输入不正确的解决办法

    appium使用sendkeys输入银行卡卡号(每4个数字自动空一格)总是输入不正确的解决办法 方法一: public static void inputComsumeInfo(WebElement ...

  9. 验证银行卡卡号是否符合规则

    话不多说,上代码 /* * 常用信用卡卡号规则 * Issuer Identifier  Card Number                            Length * Diner's ...

  10. 根据银行卡卡号判断银行

    根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号. 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表.通过二分查找的方法,找到bin号在有序表的位置,然后读出银行 ...

最新文章

  1. 服务器邮箱备份文件在哪里,如何轻松将数据文件备份到电子邮箱?
  2. ccflow如何实现自由流程的?
  3. 数据结构 - 数组模拟一般队列
  4. Android中应用安装分析
  5. JavaScript模块化不算漫长的发展史
  6. 去苹果浏览器默认样式
  7. 卸载oracle——详细版
  8. error C2440: “<function-style-cast>”: 无法从“IplImage *”转换为“cv::Mat”
  9. 没有什么不可能!郴州女孩江梦南,从双耳失聪到清华博士!
  10. accept - 指示打印系统接受发往指定目标打印机的打印 任务
  11. java记事本教程_使用记事本开发java程序的步骤
  12. NetBIOS、NETBEUI、IPX/SPX
  13. 思科路由器OSPF配置实例
  14. 内网端口映射软件之80端口映射全端口映射
  15. angular页面间传递参数
  16. C语言的奇技淫巧(1-50)
  17. echarts地图数据过旧,通过geojson自定义经纬度地图
  18. pgp解密 java_Java PGP加密解密实例教程详细操作步骤
  19. 史上最详细的LXR安装介绍
  20. strncmp函数的简单用法

热门文章

  1. K8S重启后coredns pod无法正常运行
  2. EXCEL,神奇的lookup()函数
  3. 在线教育发展前景广阔
  4. 如何更好地读开源软件之一:ERD工具简介
  5. Lecture 008-Heuristic algorithms
  6. teamviewer Android 8,利用TeamViewer控制设备
  7. Java中继承thread类与实现Runnable接口的区别(转)
  8. mysql端口establish_PHP/MySQL Dev. Primer (1) Establish Env.
  9. 一篇文章看懂Yandex SEO:俄罗斯外贸从这里开始
  10. iOS 15 真机调试包 DeviceSupport