PHP中使用Luhn算法校验信用卡及借记卡卡号
Luhn算法会通过校验码对一串数字进行验证,校验码通常会被加到这串数字的末尾处,从而得到一个完整的身份识别码。
我们以数字“7992739871”为例,计算其校验位:
- 从校验位开始,从右往左,偶数位乘2(例如,7*2=14),然后将两位数字的个位与十位相加(例如,10:1+0=1,14:1+4=5);
- 把得到的数字加在一起(本例中得到67);
- 将数字的和取模10(本例中得到7),再用10去减(本例中得到3),得到校验位。

另一种方法是:
- 从校验位开始,从右往左,偶数位乘2,然后将两位数字的个位与十位相加;
- 计算所有数字的和(67);
- 乘以9(603);
- 取其个位数字(3),得到校验位。
使用PHP实现该算法(第一种):
/**
* PHP实现Luhn算法(方式一)
* @author:http://nonfu.me
*/
$no = '7432810010473523';
$arr_no = str_split($no);
$last_n = $arr_no[count($arr_no)-1];
krsort($arr_no);
$i = 1;
$total = 0;
foreach ($arr_no as $n){
if($i%2==0){
$ix = $n*2;
if($ix>=10){
$nx = 1 + ($ix % 10);
$total += $nx;
}else{
$total += $ix;
}
}else{
$total += $n;
}
$i++;
}
$total -= $last_n;
$x = 10 - ($total % 10);
if($x == $last_n){
echo '符合Luhn算法';
}
另一种算法的PHP实现:
/**
* PHP实现Luhn算法(方式二)
* @author:http://nonfu.me
*/
$no = '6228480402564890018';
$arr_no = str_split($no);
$last_n = $arr_no[count($arr_no)-1];
krsort($arr_no);
$i = 1;
$total = 0;
foreach ($arr_no as $n){
if($i%2==0){
$ix = $n*2;
if($ix>=10){
$nx = 1 + ($ix % 10);
$total += $nx;
}else{
$total += $ix;
}
}else{
$total += $n;
}
$i++;
}
$total -= $last_n;
$total *= 9;
if($last_n == ($total%10)){
echo '符合Luhn算法';
}
经检测,能够校验16位或19位银行卡卡号。
PHP中使用Luhn算法校验信用卡及借记卡卡号的更多相关文章
- 使用Luhn算法实现信用卡号验证
问题描述: 2:信用卡号的验证 [信用卡号的验证] 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么 担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过 Luhn 算法 ...
- PHP LUHN算法验证银行卡
<?php /* 16-19 位卡号校验位采用 Luhn 校验方法计算: 第一步:把信用卡号倒序(61789372994) 第二步:取出倒序后的奇数位置上的号码, 相加等到总和s1.(eg:s1 ...
- Object-C 银行卡,信用卡校验规则(Luhn算法)
最近的项目中涉及到绑定用户的银行卡,借记卡.经过查找银行卡的校验规是采用 Luhn算法进行验证. Luhn算法,也被称作“模10算法”.它是一种简单的校验公式,一般会被用于身份证号码,IMEI号码,美 ...
- 判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验
开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验 下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验): iOS ...
- [技术栈]C#利用Luhn算法(模10算法)对IMEI校验
1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把 ...
- LUHN算法
LUHN算法,主要用来计算信用卡等证件号码的合法性. 1.从卡号最后一位数字开始,偶数位乘以2,如果乘以2的结果是两位数,将两个位上数字相加保存. 2.把所有数字相加,得到总和. 3.如果信用卡号码是 ...
- SQLSERVER中的log block校验(译)
原文:SQLSERVER中的log block校验(译) SQLSERVER中的log block校验(译) 来自:http://sankarreddy.com/2010/03/transaction ...
- JavaScript实现LUHN算法验证银行卡号有效性
一般验证银行卡有效性用到一种叫做LUHN的算法,简介请参考这篇博客:基于Luhn算法的银行卡卡号的格式校验 注意: 1.LUHN算法只是能校验卡号是否有效,并不能校验卡号和用户名是否一致. 2.如果有 ...
- 银行卡号码校验算法(Luhn算法,又叫模10算法)
有时候在网上办理一些业务时有些需要填写银行卡号码,当胡乱填写时会立即报错,但是并没有发现向后端发送请求,那么这个效果是怎么实现的呢. 对于银行卡号有一个校验算法,叫做Luhn算法. 一.银行卡号码的校 ...
随机推荐
- C++_快速排序
void quick_sort(int s[],int l,int r) { if(l<r) { int i=l,j=r,x=s[l]; while(i<j) { while( i< ...
- Flask与Ajax
这篇短文使用jquery. Flask提供一个很简单的方法来处理Ajax请求——在视图函数中用request的属性is_xhr来判断,如果是true则是异步请求. Jquery的$.getJSON() ...
- 在Code first中使用数据库里的视图
如果想在Code first中使用数据库里的视图 (不管你出于什么原因),目前的方法有2种. 一.使用Database.SqlQuery<T>("查询语句"),如: v ...
- hibernate 插件安装
安装hibernate插件 1,help--install new software work with选择All Available Sites 搜索框输入hibernate 会出现所有hiber ...
- myeclipse自带客户端连接mysql数据库
一:开启mysql服务器 开始——服务 二:打开myeclipse数据库连接视图 找到DB Browser, 三:新建一个连接 如图: 四:填写相关连接参数,并添加jar包驱动 五:然后一路next, ...
- python基础语法小笔记
这几天看着python,然后就记下一些自己觉得需要注意以下的基础语法吧! 如下: for i in range(0,100)表示从0到99,不包括后边界 单引号(')和双引号("" ...
- 关于Windows常用命令
本文引用自:http://ylbook.com/cms/computer/mingling.htm Windows Run命令: calc———–启动计算器certmgr.msc—-证书管理实用程序c ...
- IOS微信中看文章跳转页面后点击返回无效
经过查找原因发现,下面两种链接,链接1返回不了,链接2可以返回. 链接1:http://mp.weixin.qq.com/s?__biz=MzA5NDY5MzcyNA==&mid=265089 ...
- 基于Selenium2+Java的UI自动化(5) - 执行JavaScript脚本
一.操作日期选择框 QQ图片20161118215530.png1336x545 22.6 KB 说明:日期选择框大部分是不支持前端输入的,因为这个对象是 readOnly,只读属性,selenium ...
- Sublime Text 插件之常用20个插件
作为一个开发者你不可能没听说过 Sublime Text.不过你没听说过也没关系,下面让你明白. Sublime Text是一款非常精巧的文本编辑器,适合编写代码.做笔记.写文章.它用户界面十分整洁, ...