php银行卡校验

前言
银行金卡,维萨和万事达、银联品牌,如果是贷记卡或准贷记卡,一定为16位卡号。而借记卡可以16-19位不等。
美国运通卡则不论金卡或是白金卡、普通卡,都是15位卡号。
16-19 位卡号校验位采用 Luhm 校验方法计算

银行卡的校验方式

Luhm校验

  1. 将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
  2. 将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
  3. 将加法和加上校验位能被 10 整除。
 1 <?php
 2 /*
 3   16-19 位卡号校验位采用 Luhm 校验方法计算:
 4     1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
 5     2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
 6     3,将加法和加上校验位能被 10 整除。
 7 */
 8 function luhm($s) {
 9     $n = 0;
10     for ($i = strlen($s); $i >= 1; $i--) {
11         $index=$i-1;
12         //偶数位
13         if ($i % 2==0) {
14             $n += $s{$index};
15         } else {//奇数位
16             $t = $s{$index} * 2;
17             if ($t > 9) {
18                 $t = (int)($t/10)+ $t%10;
19             }
20             $n += $t;
21         }
22     }
23     return ($n % 10) == 0;
24 }
25
26 $r = luhm(‘6225881414207430‘);
27 var_dump($r);
28 ?>
时间: 2024-10-12 09:19:29

php银行卡校验的相关文章

银行卡校验

$.validator.addMethod("luhm", function(bankno) { var lastNum=bankno.substr(bankno.length-1,1); var first15Num=bankno.substr(0,bankno.length-1); var newArr=new Array(); for(var i=first15Num.length-1;i>-1;i--){ newArr.push(first15Num.substr(i,1

身份证 、银行卡校验

/*根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.    地址码表示编码对象常住户口所在县(市.旗.区)的行政区划代码.    出生日期码表示编码对象出生的年.月.日,其中年份用四位数字表示,年.月.日之间不用分隔符.    顺序码表示同一地址码所标识的区域范围内,对同年.月.日出生的人员编定的顺序号.

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

银行卡校验 可以用于前端需要用户输入银行卡时做初步校验 银行卡号码的校验采用Luhn算法,校验过程大致如下: 从右到左给卡号字符串编号,最右边第一位是1,最右边第二位是2,最右边第三位是3-. 从右向左遍历,对每一位字符t执行第三个步骤,并将每一位的计算结果相加得到一个数s. 对每一位的计算规则:如果这一位是奇数位,则返回t本身,如果是偶数位,则先将t乘以2得到一个数n,如果n是一位数(小于10),直接返回n,否则将n的个位数和十位数相加返回. 如果s能够整除10,则此号码有效,否则号码无效.

js根据银行卡号进行判断属于哪个银行并返回银行卡类型

在做绑定银行卡,输入银行卡的时候,产品有这么一个需求,需要用户输入银行卡号的时候,显示对应的银行卡名称及简称.于是苦苦寻觅,终于找到了支付宝的开放API,银行卡校验接口 https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo=6222005865412565805&cardBinCheck=true  ,直接放在浏览器url地址栏中便可以得到结果,如图所示,嗯,这个很阿里,挺不错的. 但是,直接拿ajax去请求,但是返回报错

PJzhang:今天才搞清身份证、银行卡……的编码规则

猫宁!!! ?? 之前思考过常见证件的编码规则,抽空查了一下,发现挺有意思. 一般查询证件或者手机号归属地都是直接百度小工具,但是背后的查询机制如何,可能大多人不甚了解. 介绍几种生活中最常见的几串数字. 手机号:188 6450 0763(某诈骗电话) 中国大陆的国际电话区号是+86(国家码),上面号码开头的188(移动接入码)隶属于中国移动的号段,目前中国移动的号段最多,联通次之,电信最少.卫星通信的开头号段是1349,虚拟运行商的开头字段绝大多数是17开头的4位数(同样隶属于三大运营商).

浏览器插件

浏览器插件:B/S模式下通过在客户端浏览器安装插件调用外设或者处理特殊格式数据. (这里暂时只讨论IE插件,商用中用的多一些) 常用插件有身份证阅读器.sim卡阅读器.银行卡校验插件.手写板插件.小键盘插件: 处理表格数据的华表插件.图片合成插件.图片添加水印插件,发票打印插件: 1.插件原理 插件一般使用c/c++开发,通过插件中接口处理,返回一个js对象供页面调用处理: 本质上就是通过OCX封装了调用操作系统的接口,而这些接口又通过JS对象中方法直接暴露给给页面来调用: 要想知道具体提供了哪

前端小结(3)---- 添加遮罩层,并弹出div

有如下div: <div id='pop-div' class="pop-box"> <div class="input-group has-info"> <input class="form-control" id="bankCode" type="text" placeholder="请输入银行卡号" /> <span class="

银行卡号Luhm校验Java实现代码

1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class CheckBankNumber { 5 6 7 //Description: 银行卡号Luhm校验 8 9 //Luhm校验规则:16位银行卡号(19位通用): 10 11 // 1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2. 12 // 2.将奇位乘积的个十位全部相加

效验是否为银行卡

http://www.oschina.net/code/snippet_86738_3128 效验是否为银行卡,用于验证 现行 16 位银联卡现行卡号开头 6 位是 622126-622925 之间的,7 到 15 位是银行自定义的, 可能是发卡分行,发卡网点,发卡序号,第 16 位是校验码. 16 位卡号校验位采用 Luhm 校验方法计算: 1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2 2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字 3,将