php实现通用的信用卡验证类


Posted in PHP onMarch 24, 2015

本文实例讲述了php实现通用的信用卡验证类。分享给大家供大家参考。

原文说明如下:

Credit Card Validation Solution (PHP Edition)
Version 3.5

Description
Credit Card Validation Solution™ uses a four step process to ensure credit card numbers are keyed in correctly. This procedure accurately checks cards from American Express, Australian BankCard, Carte Blache, Diners Club, Discover/Novus, JCB, MasterCard and Visa.
For more information, please read the comments in the code itself.

Installation Instructions
Select the text between the two lines indicated, below.
Copy the text.
Open up a text editor.
Paste the text.
Save that file. When saving it, make sure to:
save it in a directory on your webserver, and
name it with an extension that your server will recognize needs parsing by PHP.
To see it in action, open up that file in your web browswer.

具体代码如下:

<?php
# ------------------------------------------------------------------------
# Credit Card Validation Solution, version 3.5         PHP Edition
# 25 May 2000
#
# COPYRIGHT NOTICE:
# a) This code is property of The Analysis and Solutions Company.
# b) It is being distributed free of charge and on an "as is" basis.
# c) Use of this code, or any part thereof, is contingent upon leaving
#   this copyright notice, name and address information in tact.
# d) Written permission must be obtained from us before this code, or any
#   part thereof, is sold or used in a product which is sold.
# e) By using this code, you accept full responsibility for its use
#   and will not hold the Analysis and Solutions Company, its employees
#   or officers liable for damages of any sort.
# f) This code is not to be used for illegal purposes.
# g) Please email us any revisions made to this code.
#
# Copyright 2000         http://www.AnalysisAndSolutions.com/code/
# The Analysis and Solutions Company     info@AnalysisAndSolutions.com
# ------------------------------------------------------------------------
#
# DESCRIPTION:
# Credit Card Validation Solution uses a four step process to ensure
# credit card numbers are keyed in correctly. This procedure accurately
# checks cards from American Express, Australian BankCard, Carte Blache,
# Diners Club, Discover/Novus, JCB, MasterCard and Visa.
#
# CAUTION:
# CCVS uses exact number ranges as part of the validation process. These
# ranges are current as of 20 October 1999. If presently undefined ranges
# come into use in the future, this program will improperly deject card
# numbers in such ranges, rendering an error message entitled "Potential
# Card Type Discrepancy." If this happens while entering a card & type
# you KNOW are valid, please contact us so we can update the ranges.
#
# POTENTIAL CUSTOMIZATIONS:
# * If you don't accept some of these card types, edit Step 2, using pound
# signs "#" to comment out the "elseif," "$CardName" and "$ShouldLength"
# lines in question.
# * Additional card types can be added by inserting new "elseif,"
# "$CardName" and "$ShouldLength" lines in Step 2.
# * The three functions here can be called by other PHP documents to check
# any number.
#
# CREDITS:
# We learned of the Mod 10 Algorithm in some Perl code, entitled
# "The Validator," available on Matt's Script Archive,
# http://worldwidemart.com/scripts/readme/ccver.shtml. That code was
# written by David Paris, who based it on material Melvyn Myers reposted
# from an unknown author. Paris credits Aries Solis for tracking down the
# data underlying the algorithm. At the same time, our code bears no
# resemblance to its predecessors. CCValidationSolution was first written
# for Visual Basic, on which Allen Browne and Rico Zschau assisted.
# Neil Fraser helped prune down the OnlyNumericSolution() for Perl.
function CCValidationSolution ($Number) {
  global $CardName;
  # 1) Get rid of spaces and non-numeric characters.
  $Number = OnlyNumericSolution($Number);
  # 2) Do the first four digits fit within proper ranges?
  #   If so, who's the card issuer and how long should the number be?
  $NumberLeft = substr($Number, 0, 4);
  $NumberLength = strlen($Number);
  if ($NumberLeft >= 3000 and $NumberLeft <= 3059) {
    $CardName = "Diners Club";
    $ShouldLength = 14;
  } elseif ($NumberLeft >= 3600 and $NumberLeft <= 3699) {
    $CardName = "Diners Club";
    $ShouldLength = 14;
  } elseif ($NumberLeft >= 3800 and $NumberLeft <= 3889) {
    $CardName = "Diners Club";
    $ShouldLength = 14;
  } elseif ($NumberLeft >= 3400 and $NumberLeft <= 3499) {
    $CardName = "American Express";
    $ShouldLength = 15;
  } elseif ($NumberLeft >= 3700 and $NumberLeft <= 3799) {
    $CardName = "American Express";
    $ShouldLength = 15;
  } elseif ($NumberLeft >= 3528 and $NumberLeft <= 3589) {
    $CardName = "JCB";
    $ShouldLength = 16;
  } elseif ($NumberLeft >= 3890 and $NumberLeft <= 3899) {
    $CardName = "Carte Blache";
    $ShouldLength = 14;
  } elseif ($NumberLeft >= 4000 and $NumberLeft <= 4999) {
    $CardName = "Visa";
    if ($NumberLength > 14) {
      $ShouldLength = 16;
    } elseif ($NumberLength < 14) {
      $ShouldLength = 13;
    } else {
      echo "<br /><em>The Visa number entered, $Number, in is 14 digits long.<br />Visa cards usually have 16 digits, though some have 13.<br />Please check the number and try again.</em><br />n";
      return FALSE;
    }
  } elseif ($NumberLeft >= 5100 and $NumberLeft <= 5599) {
    $CardName = "MasterCard";
    $ShouldLength = 16;
  } elseif ($NumberLeft == 5610) {
    $CardName = "Australian BankCard";
    $ShouldLength = 16;
  } elseif ($NumberLeft == 6011) {
    $CardName = "Discover/Novus";
    $ShouldLength = 16;
  } else {
    echo "<br /><em>The first four digits of the number entered are $NumberLeft. <br />If that's correct, we don't accept that type of credit card.<br />If it's wrong, please try again.</em><br />n";
    return FALSE;
  }
  # 3) Is the number the right length?
  if ($NumberLength <> $ShouldLength) {
    $Missing = $NumberLength - $ShouldLength;
    if ($Missing < 0) {
      echo "<br /><em>The $CardName number entered, $Number, is missing " . abs($Missing) . " digit(s).<br />Please check the number and try again.</em><br />n";
    } else {
      echo "<br /><em>The $CardName number entered, $Number, has $Missing too many digit(s).<br />Please check the number and try again.</em><br />n";
    }
    return FALSE;
  }
  # 4) Does the number pass the Mod 10 Algorithm Checksum?
  if (Mod10Solution($Number) == TRUE) {
    return TRUE;
  } else {
    echo "<br /><em>The $CardName number entered, $Number, is invalid.<br />Please check the number and try again.</em><br />n";
  return FALSE;
  }
}
function OnlyNumericSolution ($Number) {
  # Remove any non numeric characters.
  # Ensure number is no more than 19 characters long.
  return substr( ereg_replace( "[^0-9]", "", $Number) , 0, 19);
}
function Mod10Solution ($Number) {
  $NumberLength = strlen($Number);
  $Checksum = 0;
  # Add even digits in even length strings
  # or odd digits in odd length strings.
  for ($Location = 1 - ($NumberLength % 2); $Location < $NumberLength; $Location += 2) {
    $Checksum += substr($Number, $Location, 1);
  }
  # Analyze odd digits in even length strings
  # or even digits in odd length strings.
  for ($Location = ($NumberLength % 2); $Location < $NumberLength; $Location += 2) {
    $Digit = substr($Number, $Location, 1) * 2;
    if ($Digit < 10) {
      $Checksum += $Digit;
    } else {
      $Checksum += $Digit - 9;
    }
  }
  # Is the checksum divisible by ten?
  return ($Checksum % 10 == 0);
}
# ----------- BEGIN SAMPLE USER INTERFACE SECTION ------------
#
# This section provides a simple sample user interface for the
# Credit Card Validation functions. It generates an HTML form
# where you enter a card number to check.
#
  # If a number has been posted by the form, check it.
  if ( isset($Number) ) {
    # Get rid of spaces and non-numeric characters in posted
    # numbers so they display correctly on the input form.
    $Number = OnlyNumericSolution($Number);
    if (CCValidationSolution($Number) == TRUE) {
      echo "<br />The $CardName number entered, $Number, <em>is</em> valid.<br />n";
    }
  } else {
    $Number = "";
  }
  # Setup an input form. Posting it calls this page again.
  echo "<form method="post" action="$REQUEST_URI">n";
  echo "<br />Credit Card Number: <input type="text" name="Number" value="$Number">n";
  echo "<input type="Submit" name="submitr" value="Check its Validity">n";
  echo "</form><br />n";
#
# ------------ END SAMPLE USER INTERFACE SECTION -------------
?>

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

PHP 相关文章推荐
最小化数据传输――在客户端存储数据
Oct 09 PHP
几个学习PHP的网址
Nov 25 PHP
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
php 归并排序 数组交集
May 10 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
PHP 匿名函数与注意事项详细介绍
Nov 26 PHP
php实现简单加入购物车功能
Mar 07 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
php生成短域名函数
Mar 23 #PHP
PHP随机生成信用卡卡号的方法
Mar 23 #PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 #PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 #PHP
php实现约瑟夫问题的方法小结
Mar 23 #PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 #PHP
PHP贪婪算法解决0-1背包问题实例分析
Mar 23 #PHP
You might like
php 表单数据的获取代码
2009/03/10 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
input框中的name和id的区别
2016/11/16 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
python写日志封装类实例
2015/06/28 Python
Python3字符串学习教程
2015/08/20 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
python opencv实现运动检测
2018/07/10 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
python双向链表原理与实现方法详解
2019/12/03 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
python switch 实现多分支选择功能
2020/12/21 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
安娜卡列尼娜观后感
2015/06/11 职场文书
详解Python中的for循环
2022/04/30 Python