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 相关文章推荐
7个超级实用的PHP代码片段
Jul 11 PHP
PHP 万年历实现代码
Oct 18 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
PHP count()函数讲解
Feb 03 PHP
Laravel实现搜索的时候分页并携带参数
Oct 15 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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
中东人咖啡哲学
2021/03/03 咖啡文化
php4的session功能评述(二)
2006/10/09 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
微信小程序的引导页实现代码
2020/06/24 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
python图像处理之镜像实现方法
2015/05/30 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
在django view中给form传入参数的例子
2019/07/19 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
协议书怎么写
2014/04/21 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang