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.ini 中文版
Oct 28 PHP
FleaPHP的安全设置方法
Sep 15 PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
php实现mysql事务处理的方法
Dec 25 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
php反射类ReflectionClass用法分析
May 12 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 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 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
Javascript之String对象详解
2016/06/08 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
python开发入门——set的使用
2020/09/03 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
广告学专业应届生求职信
2013/10/01 职场文书
便利店投资创业计划书
2014/02/08 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
建筑工地宣传标语
2014/06/18 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python