PHP LUHN算法验证银行卡
2023-09-27 14:24:29 时间
<?php
/*
16-19 位卡号校验位采用 Luhn 校验方法计算:
第一步:把信用卡号倒序(61789372994)
第二步:取出倒序后的奇数位置上的号码, 相加等到总和s1。(eg:s1=6+7+9+7+9+4=42)
第三步:取出倒序后的偶数位置上的号码,每个号码乘以2。 (eg:2,16,6,4,18)
第四步:把第三步得到的大于10的号码转化为个位+十位。(eg:2,7,6,4,9)
第五步:把处理好的偶数位号码相加,得到s2。 (eg:s2=2+7+6+4+9=28)
第六步:判读(s1+s2)%10 == 0则有效,否则无效。(有效)
*/
function checkBankCard($card)
{
// step1 判断是否16到19位
$pattern = '/^\d{16,19}$/';
if (!preg_match($pattern,$card)) {
return false;
}
// step2 luhn 算法校验
$len = strlen($card);
$sum = 0;
for ($i = 0; $i < $len ; $i++)
{
if (($i + $len) & 1)
{ // 奇数
$sum += ord($card[$i]) - ord('0');
}
else
{ // 偶数
$tmp = (ord($card[$i]) - ord('0')) * 2;
$sum += floor($tmp / 10) + $tmp % 10;
}
}
return $sum % 10 === 0;
}
相关文章
- PHP实现各种经典算法
- php封装json通信接口详解及实例
- PHP随机红包算法
- php 经典的算法题你懂的
- PHP性能调优---PHP调试工具Xdebug安装配置教程
- php 按照字典序排序 微信卡券签名算法用到
- PHP实现四种基本排序算法
- PHP中全局变量的使用global和$GLOBALS[]
- PHP 判断数据类型【转】
- PHP Non Thread Safe和Thread Safe区别【转】
- php生成唯一id
- PHP排序算法之快速排序
- PDFlib Adds support for PHP
- PHP对百度UEditor富文本编辑器的简单使用
- php获取当前页完整url地址的方法教程
- PHP处理海量样本相似度聚类算法
- dedecms /member/buy_action.php Weak Password Vulnerability Algorithm Vul
- PHP 算法题:有多少苹果用来分赃1.1
- php 正则中文匹配