用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - php代码库

信用卡 通用信用卡验证类 大莱卡、发现/罗福斯,JCB、万事达卡和Visa

2014-12-09 作者: php源代码大全举报

[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  ------------- 

?> 



网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...