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脚本数据库功能详解(中)
Oct 09 PHP
PHP 第二节 数据类型之数值型
Apr 28 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
php以post形式发送xml的方法
Nov 04 PHP
php上传大文件失败的原因及应对策略
Oct 20 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
Python 修改列表中的元素方法
2018/06/26 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
介绍一下游标
2012/01/10 面试题
Java的类与C++的类有什么不同
2014/01/18 面试题
全国助残日活动总结
2015/05/11 职场文书
芙蓉镇观后感
2015/06/10 职场文书
中秋节祝酒词
2015/08/12 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers