本文实例讲述了php实现通用的信用卡验证类。分享给大家提供大家参考。
原文说明如下:
信用卡验证解决方案(PHP版)
版本 3.5
描述
信用卡验证解决方案™ 使用四步流程来确保正确输入信用卡号码。此程序可准确检查 American Express、Australian BankCard、Carte Blache、Diners Club、Discover/Novus、JCB、MasterCard 和 Visa 的卡。
有关更多信息,请阅读代码本身的注释。
安装说明
选择下面所示的两行之间的文本。
复制文本。
打开文本编辑器。
粘贴文本。
保存该文件。保存时,请确保:
将其保存在网络服务器上的目录中,然后
使用您的服务器将识别需要 PHP 解析的扩展名来命名它。
要查看其实际效果,请在网络浏览器中打开该文件。
具体代码如下:
<?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程序设计有所帮助。