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 相关文章推荐
无数据库的详细域名查询程序PHP版(3)
Oct 09 PHP
PHP 存储文本换行实现方法
Jan 05 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
Yii开启片段缓存的方法
Mar 28 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
详细解读php的命名空间(一)
Feb 21 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 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开发实现微信退款功能示例
2017/11/25 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
python中文乱码的解决方法
2013/11/04 Python
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
python字典key不能是可以是啥类型
2020/08/04 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
介绍Ibatis的核心类
2013/11/18 面试题
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
考博自荐信
2013/10/25 职场文书
计算机应用职专应届生求职信
2013/11/12 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
欢迎家长标语
2014/10/08 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
青年教师听课心得体会
2016/01/15 职场文书
Python实现天气查询软件
2021/06/07 Python