PHP实现通过Luhn算法校验信用卡卡号是否有效


Posted in PHP onMarch 23, 2015

本文实例讲述了PHP实现通过Luhn算法校验信用卡卡号是否有效的方法。分享给大家供大家参考。具体实现方法如下:

$numbers = "49927398716 49927398717 1234567812345678 1234567812345670";
foreach (split(' ', $numbers) as $n)
  echo "$n is ", luhnTest($n) ? 'valid' : 'not valid', '</br>';
 
function luhnTest($num) {
  $len = strlen($num);
  for ($i = $len-1; $i >= 0; $i--) {
    $ord = ord($num[$i]);
    if (($len - 1) & $i) {
      $sum += $ord;
    } else {
      $sum += $ord / 5 + (2 * $ord) % 10;
    }
  }   
  return $sum % 10 == 0;
}

运行结果

49927398716 is valid
49927398717 is not valid
1234567812345678 is not valid
1234567812345670 is valid

下面是一个更为简洁的代码:

function luhn_test($num) {

    $str = '';

    foreach( array_reverse( str_split( $num ) ) as $i => $c ) $str .= ($i % 2 ? $c * 2 : $c );

    return array_sum( str_split($str) ) % 10 == 0;

}

foreach (array('49927398716','49927398717','1234567812345678','1234567812345670') as $n)

echo "$n is ", luhn_test($n) ? 'valid' : 'not valid', "</br>\n";

输出结果如下

49927398716 is valid
49927398717 is not valid
1234567812345678 is not valid
1234567812345670 is valid

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP_Flame(Version:Progress)的原代码
Oct 09 PHP
建站常用13种PHP开源CMS比较
Aug 23 PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
Sublime里直接运行PHP配置方法
Nov 28 PHP
php获取错误信息的方法
Jul 17 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
详解Laravel服务容器的绑定与解析
Nov 05 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 #PHP
php实现约瑟夫问题的方法小结
Mar 23 #PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 #PHP
PHP贪婪算法解决0-1背包问题实例分析
Mar 23 #PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 #PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 #PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 #PHP
You might like
php disk_free_space 返回目录可用空间
2010/05/10 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
javascript定义函数的方法
2010/12/06 Javascript
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
利用JS实现数字增长
2016/07/28 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Django实现随机图形验证码的示例
2020/10/15 Python
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
群胜软件Java笔试题
2012/09/29 面试题
教师队伍管理制度
2014/01/14 职场文书
信息合作协议书
2014/10/09 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
离婚协议书格式
2015/01/26 职场文书
加入学生会自荐书
2015/03/05 职场文书
2015年体育部工作总结
2015/04/02 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
科普 | 业余无线电知识-波段篇
2022/02/18 无线电