php實(shí)現(xiàn)通用的信用卡驗(yàn)證類
來源:易賢網(wǎng) 閱讀:1053 次 日期:2015-03-26 11:17:07
溫馨提示:易賢網(wǎng)小編為您整理了“php實(shí)現(xiàn)通用的信用卡驗(yàn)證類”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了php實(shí)現(xiàn)通用的信用卡驗(yàn)證類,涉及信用卡的規(guī)則與php字符串操作的相關(guān)技巧,具有一定參考借鑒價值,文中有英文原文注釋說明,有助于更直觀的了解源碼相關(guān)信息,需要的朋友可以參考下

本文實(shí)例講述了php實(shí)現(xiàn)通用的信用卡驗(yàn)證類。分享給大家供大家參考。

原文說明如下:

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

# The Analysis and Solutions Company

# ------------------------------------------------------------------------

#

# 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,

#. 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程序設(shè)計(jì)有所幫助。

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:php實(shí)現(xiàn)通用的信用卡驗(yàn)證類
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)