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文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
php 生成文字png图片的代码
Apr 17 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
php使浏览器直接下载pdf文件的方法
Nov 15 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
php实现计数器方法小结
Jan 05 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
PHP开发的微信现金红包功能示例
Jun 29 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判断手机是IOS还是Android
2015/12/09 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
javascript编程起步(第六课)
2007/01/10 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
python编程实现希尔排序
2017/04/13 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
python3中函数参数的四种简单用法
2018/07/09 Python
详解Python:面向对象编程
2019/04/10 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
如何用Python绘制3D柱形图
2020/09/16 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
人力资源总监工作说明
2014/03/03 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
企业文化理念标语
2014/06/10 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
实习生工作证明范本
2014/09/14 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers