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 相关文章推荐
让你同时上传 1000 个文件 (一)
Oct 09 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
Dec 18 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
Mar 29 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 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 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
vue中监听返回键问题
2019/08/28 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
python list的index()和find()的实现
2020/11/16 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
乌克兰设计师和品牌的服装:Love&Live
2020/04/14 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
小学生期末评语大全
2014/04/21 职场文书
超市创业计划书
2014/04/24 职场文书
技校毕业生自荐信
2014/06/03 职场文书
体检通知范文
2015/04/21 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书