当前位置:首页 > PHP教程 > php类库 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-17 15:54:20 浏览: 评论:0 

这篇文章主要介绍了php实现通用的信用卡验证类,涉及信用卡的规则与php字符串操作的相关技巧,具有一定参考借鉴价值,文中有英文原文注释说明,有助于更直观的了解源码相关信息,需要的朋友可以参考下

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

原文说明如下:

  1. Credit Card Validation Solution (PHP Edition) 
  2. Version 3.5 
  3.  
  4. Description 
  5. 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. 
  6. For more information, please read the comments in the code itself. 
  7.  
  8. Installation Instructions 
  9. Select the text between the two lines indicated, below. 
  10. Copy the text. 
  11. Open up a text editor. 
  12. Paste the text. 
  13. Save that file. When saving it, make sure to: 
  14. save it in a directory on your webserver, and 
  15. name it with an extension that your server will recognize needs parsing by PHP. 
  16. To see it in action, open up that file in your web browswer. 

具体代码如下:

  1. <?php 
  2. # ------------------------------------------------------------------------ 
  3. # Credit Card Validation Solution, version 3.5         PHP Edition 
  4. # 25 May 2000 
  5. # COPYRIGHT NOTICE: 
  6. # a) This code is property of The Analysis and Solutions Company. 
  7. # b) It is being distributed free of charge and on an "as is" basis. 
  8. # c) Use of this code, or any part thereof, is contingent upon leaving 
  9. #   this copyright notice, name and address information in tact. 
  10. # d) Written permission must be obtained from us before this code, or any 
  11. #   part thereof, is sold or used in a product which is sold. 
  12. # e) By using this code, you accept full responsibility for its use 
  13. #   and will not hold the Analysis and Solutions Company, its employees 
  14. #   or officers liable for damages of any sort. 
  15. # f) This code is not to be used for illegal purposes. 
  16. # g) Please email us any revisions made to this code. 
  17. # Copyright 2000         http://www.AnalysisAndSolutions.com/code/ 
  18. # The Analysis and Solutions Company     info@AnalysisAndSolutions.com 
  19. # ------------------------------------------------------------------------ 
  20. # DESCRIPTION: 
  21. # Credit Card Validation Solution uses a four step process to ensure 
  22. # credit card numbers are keyed in correctly. This procedure accurately 
  23. # checks cards from American Express, Australian BankCard, Carte Blache, 
  24. # Diners Club, Discover/Novus, JCB, MasterCard and Visa. 
  25. # CAUTION: 
  26. # CCVS uses exact number ranges as part of the validation process. These 
  27. # ranges are current as of 20 October 1999. If presently undefined ranges 
  28. # come into use in the future, this program will improperly deject card 
  29. # numbers in such ranges, rendering an error message entitled "Potential 
  30. # Card Type Discrepancy." If this happens while entering a card & type 
  31. # you KNOW are valid, please contact us so we can update the ranges. 
  32. # POTENTIAL CUSTOMIZATIONS: 
  33. # * If you don't accept some of these card types, edit Step 2, using pound 
  34. # signs "#" to comment out the "elseif," "$CardName" and "$ShouldLength" 
  35. # lines in question. 
  36. # * Additional card types can be added by inserting new "elseif," 
  37. "$CardName" and "$ShouldLength" lines in Step 2. 
  38. # * The three functions here can be called by other PHP documents to check 
  39. # any number. 
  40. # CREDITS: 
  41. # We learned of the Mod 10 Algorithm in some Perl code, entitled 
  42. "The Validator," available on Matt's Script Archive, 
  43. # http://worldwidemart.com/scripts/readme/ccver.shtml. That code was 
  44. # written by David Paris, who based it on material Melvyn Myers reposted 
  45. # from an unknown author. Paris credits Aries Solis for tracking down the 
  46. # data underlying the algorithm. At the same time, our code bears no 
  47. # resemblance to its predecessors. CCValidationSolution was first written 
  48. for Visual Basic, on which Allen Browne and Rico Zschau assisted. 
  49. # Neil Fraser helped prune down the OnlyNumericSolution() for Perl. 
  50. function CCValidationSolution ($Number) { 
  51.   global $CardName
  52.   # 1) Get rid of spaces and non-numeric characters. 
  53.   $Number = OnlyNumericSolution($Number); 
  54.   # 2) Do the first four digits fit within proper ranges? 
  55.   #   If so, who's the card issuer and how long should the number be? 
  56.   $NumberLeft = substr($Number, 0, 4); 
  57.   $NumberLength = strlen($Number); 
  58.   if ($NumberLeft >= 3000 and $NumberLeft <= 3059) { 
  59.     $CardName = "Diners Club"
  60.     $ShouldLength = 14; 
  61.   } elseif ($NumberLeft >= 3600 and $NumberLeft <= 3699) { 
  62.     $CardName = "Diners Club"
  63.     $ShouldLength = 14; 
  64.   } elseif ($NumberLeft >= 3800 and $NumberLeft <= 3889) { 
  65.     $CardName = "Diners Club"
  66.     $ShouldLength = 14; 
  67.   } elseif ($NumberLeft >= 3400 and $NumberLeft <= 3499) { 
  68.     $CardName = "American Express"
  69.     $ShouldLength = 15; 
  70.   } elseif ($NumberLeft >= 3700 and $NumberLeft <= 3799) { 
  71.     $CardName = "American Express"
  72.     $ShouldLength = 15; 
  73.   } elseif ($NumberLeft >= 3528 and $NumberLeft <= 3589) { 
  74.     $CardName = "JCB"
  75.     $ShouldLength = 16; 
  76.   } elseif ($NumberLeft >= 3890 and $NumberLeft <= 3899) { 
  77.     $CardName = "Carte Blache"
  78.     $ShouldLength = 14; 
  79.   } elseif ($NumberLeft >= 4000 and $NumberLeft <= 4999) { 
  80.     $CardName = "Visa"
  81.     if ($NumberLength > 14) { 
  82.       $ShouldLength = 16; 
  83.     } elseif ($NumberLength < 14) { 
  84.       $ShouldLength = 13; 
  85.     } else { 
  86.       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"
  87.       return FALSE; 
  88.     } 
  89.   } elseif ($NumberLeft >= 5100 and $NumberLeft <= 5599) { 
  90.     $CardName = "MasterCard"
  91.     $ShouldLength = 16; 
  92.   } elseif ($NumberLeft == 5610) { 
  93.     $CardName = "Australian BankCard"
  94.     $ShouldLength = 16; 
  95.   } elseif ($NumberLeft == 6011) { 
  96.     $CardName = "Discover/Novus"
  97.     $ShouldLength = 16; 
  98.   } else { 
  99.     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"
  100.     return FALSE; 
  101.   } 
  102.   # 3) Is the number the right length? 
  103.   if ($NumberLength <> $ShouldLength) { 
  104.     $Missing = $NumberLength - $ShouldLength
  105.     if ($Missing < 0) { 
  106.       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"
  107.     } else { 
  108.       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"
  109.     } 
  110.     return FALSE; 
  111.   } 
  112.   # 4) Does the number pass the Mod 10 Algorithm Checksum? 
  113.   if (Mod10Solution($Number) == TRUE) { 
  114.     return TRUE; 
  115.   } else { 
  116.     echo "<br /><em>The $CardName number entered, $Number, is invalid.<br />Please check the number and try again.</em><br />n"
  117.   return FALSE; 
  118.   } 
  119. function OnlyNumericSolution ($Number) { 
  120.   # Remove any non numeric characters. 
  121.   # Ensure number is no more than 19 characters long. 
  122.   return substrereg_replace"[^0-9]"""$Number) , 0, 19); 
  123. function Mod10Solution ($Number) { 
  124.   $NumberLength = strlen($Number); 
  125.   $Checksum = 0; 
  126.   # Add even digits in even length strings 
  127.   # or odd digits in odd length strings. 
  128.   for ($Location = 1 - ($NumberLength % 2); $Location < $NumberLength$Location += 2) { 
  129.     $Checksum += substr($Number$Location, 1); 
  130.   } 
  131.   # Analyze odd digits in even length strings 
  132.   # or even digits in odd length strings. 
  133.   for ($Location = ($NumberLength % 2); $Location < $NumberLength$Location += 2) { 
  134.     $Digit = substr($Number$Location, 1) * 2; 
  135.     if ($Digit < 10) { 
  136.       $Checksum += $Digit
  137.     } else { 
  138.       $Checksum += $Digit - 9; 
  139.     } 
  140.   } 
  141.   # Is the checksum divisible by ten? 
  142.   return ($Checksum % 10 == 0); 
  143. # ----------- BEGIN SAMPLE USER INTERFACE SECTION ------------ 
  144. # This section provides a simple sample user interface for the 
  145. # Credit Card Validation functions. It generates an HTML form 
  146. # where you enter a card number to check. 
  147.   # If a number has been posted by the form, check it. 
  148.   if ( isset($Number) ) { 
  149.     # Get rid of spaces and non-numeric characters in posted 
  150.     # numbers so they display correctly on the input form. 
  151.     $Number = OnlyNumericSolution($Number); 
  152.     if (CCValidationSolution($Number) == TRUE) { 
  153.       echo "<br />The $CardName number entered, $Number, <em>is</em> valid.<br />n"
  154.     } 
  155.   } else { 
  156.     $Number = ""
  157.   } 
  158.   # Setup an input form. Posting it calls this page again. 
  159.   echo "<form method="post" action="$REQUEST_URI">n"
  160.   echo "<br />Credit Card Number: <input type="text" name="Number" value="$Number">n"
  161.   echo "<input type="Submit" name="submitr" value="Check its Validity">n"
  162.   echo "</form><br />n"
  163. # ------------ END SAMPLE USER INTERFACE SECTION ------------- 
  164. ?>

Tags: php信用卡验证类

分享到: