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 相关文章推荐
PHP的面向对象编程
Oct 09 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
PHP连接操作access数据库实例
Mar 30 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
用Flash图形化数据(二)
2006/10/09 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python根据文件大小打log日志
2014/10/09 Python
python已协程方式处理任务实现过程
2019/12/27 Python
Python内置类型性能分析过程实例
2020/01/29 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
金智子午JAVA面试题
2015/09/04 面试题
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
技校生自我鉴定范文
2013/09/26 职场文书
有针对性的求职自荐信
2013/11/14 职场文书
投标保密承诺书
2014/05/19 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
监考失职检讨书
2015/01/26 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis