php实现用于验证所有类型的信用卡类


Posted in PHP onMarch 24, 2015

本文实例讲述了php实现用于验证所有类型的信用卡类。分享给大家供大家参考。具体如下:

这个php类比较完整,可以用于验证各种不同的信用卡,针对信用卡的卡号的通用规则进行了验证,同时对不同类型的信用卡进行了针对性的识别。
代码接受一个信用卡号码和有效日期,如果两者都有效,则返回TRUE,否则返回FALSE。

本插件接受以下参数:
$number 表示信用卡号码的一个字符串
$expiry 信用卡有效日期,采用07/12或0712这样的格式

<?php
// Plug-in 32: Validate Credit Card
// This is an executable example with additional code supplied
// To obtain just the plug-ins please click on the Download link
$card  = "4567 1234 5678 9101";
$exp  = "06/11";
echo "Validating: $card : $exp<br>";
$result = PIPHP_ValidateCC($card, $exp);
if ($result != FALSE) echo "Card Validated";
else echo "Card did not validate";
function PIPHP_ValidateCC($number, $expiry)
{
  // Plug-in 32: Validate Credit Card
  //
  // This plug-in accepts a credit card number and
  // an expiry date and returns TRUE or FALSE,
  // depending on whether the details pass date
  // and checksum validation. The arguments required
  // are:
  //
  //  $number: Credit Card Number
  //  $expiry: Expiry date in the form:
  //    07/12 or 0712 (for July, 2012)
  $number = preg_replace('/[^\d]/', '', $number);
  $expiry = preg_replace('/[^\d]/', '', $expiry);
  $left  = substr($number, 0, 4);
  $cclen = strlen($number);
  $chksum = 0;
  // Diners Club
  if (($left >= 3000) && ($left <= 3059) ||
    ($left >= 3600) && ($left <= 3699) ||
    ($left >= 3800) && ($left <= 3889))
   if ($cclen != 14) return FALSE;
  // JCB
  if (($left >= 3088) && ($left <= 3094) ||
    ($left >= 3096) && ($left <= 3102) ||
    ($left >= 3112) && ($left <= 3120) ||
    ($left >= 3158) && ($left <= 3159) ||
    ($left >= 3337) && ($left <= 3349) ||
    ($left >= 3528) && ($left <= 3589))
   if ($cclen != 16) return FALSE;
  // American Express
  elseif (($left >= 3400) && ($left <= 3499) ||
      ($left >= 3700) && ($left <= 3799))
   if ($cclen != 15) return FALSE;
  // Carte Blanche
  elseif (($left >= 3890) && ($left <= 3899))
   if ($cclen != 14) return FALSE;
  // Visa
  elseif (($left >= 4000) && ($left <= 4999))
   if ($cclen != 13 && $cclen != 16) return FALSE;
  // MasterCard
  elseif (($left >= 5100) && ($left <= 5599))
   if ($cclen != 16) return FALSE;
  // Australian BankCard
  elseif ($left == 5610)
   if ($cclen != 16) return FALSE;
  // Discover
  elseif ($left == 6011)
   if ($cclen != 16) return FALSE;
  // Unknown
  else return FALSE;
  for ($j = 1 - ($cclen % 2); $j < $cclen; $j += 2)
   $chksum += substr($number, $j, 1);
  for ($j = $cclen % 2; $j < $cclen; $j += 2)
  {
   $d = substr($number, $j, 1) * 2;
   $chksum += $d < 10 ? $d : $d - 9;
  }
  if ($chksum % 10 != 0) return FALSE;
  if (mktime(0, 0, 0, substr($expiry, 0, 2), date("t"),
   substr($expiry, 2, 2)) < time()) return FALSE;
  return TRUE;
}
?>

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

PHP 相关文章推荐
建立文件交换功能的脚本(二)
Oct 09 PHP
php入门教程 精简版
Dec 13 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 PHP
PHP中命名空间的使用例子
Mar 22 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
浅谈如何提高PHP代码的质量
May 28 PHP
php动态生成版权所有信息的方法
Mar 24 #PHP
php实现通用的信用卡验证类
Mar 24 #PHP
php生成短域名函数
Mar 23 #PHP
PHP随机生成信用卡卡号的方法
Mar 23 #PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 #PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 #PHP
php实现约瑟夫问题的方法小结
Mar 23 #PHP
You might like
使用php shell命令合并图片的代码
2011/06/23 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
图片之间的切换
2006/06/26 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
Django内容增加富文本功能的实例
2017/10/17 Python
用python实现的线程池实例代码
2018/01/06 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
python爬虫实例详解
2018/06/19 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
法人代表任命书范本
2014/06/05 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
西安兵马俑导游词
2015/02/02 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
法人代表资格证明书
2015/06/18 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android