文章来源:http://platon.sk/article.php?38
Author: Hal Stiles | Section: Dev Resources | Date: 2005-06-25
This document outlines procedures and algorithms for Verifying the accuracy and validity of credit card numbers. Most credit card numbers are encoded with a "Check Digit". A check digit is a digit added to a number (either at the end or the beginning) that validates the authenticity of the number.
A simple algorithm is applied to the other digits of the number which yields the check digit. By running the algorithm, and comparing the check digit you get from the algorithm with the check digit encoded with the credit card number, you can verify that you have correctly read all of the digits and that they make a valid combination.
Possible uses for this information:
Here is a table outlining the major credit cards that you might want to validate.
CARD TYPE | Prefix | Length | Check digit algorithm |
---|---|---|---|
MASTERCARD | 51-55 | 16 | mod 10 |
VISA | 4 | 13, 16 | mod 10 |
AMEX | 34 37 | 15 | mod 10 |
Diners Club / Carte Blanche | 300-305 36 38 | 14 | mod 10 |
Discover | 6011 | 16 | mod 10 |
enRoute | 2014 2149 | 15 | any |
JCB | 3 | 16 | mod 10 |
JCB | 2131 1800 | 15 | mod 10 |
The following steps are required to validate the primary account number:
Step 1: Double the value of alternate digits of the primary account number beginning with the second digit from the right (the first right--hand digit is the check digit.)
Step 2: Add the individual digits comprising the products obtained in Step 1 to each of the unaffected digits in the original number.
Step 3: The total obtained in Step 2 must be a number ending in zero (30, 40, 50, etc.) for the account number to be validated.
For example, to validate the primary account number 49927398716:
Step 1:
4 9 9 2 7 3 9 8 7 1 6
x2 x2 x2 x2 x2
------------------------------
18 4 6 16 2
Step 2:
4 +(1+8)+ 9 + (4) + 7 + (6) + 9 +(1+6) + 7 + (2) + 6
Step 3: Sum = 70 => Card number is validated
Note: Card is valid because the 70/10 yields no remainder.
The great folks at ICVERIFY are the original source of this data, I only formatted it in HTML.
If you are in the market, I wrote a set of FoxPro modules for Windows/Dos that interface nicely with ICVERIFY in a multi-user LAN setup. You just set up ICVERIFY on a single station, and all stations on the LAN can authorize credit cards with a single FOXBASE function call. Of course, you have to license ICVERIFY by the node, but it is very reasonable. I also wrote a couple of simple functions to perform pre-authorization, card screening, etc.
Here is a Microsoft Excel worksheet that will validate a number for you.
Horace Vallas made a NeoWebScript (Tcl really) procedure that implements it. Check it out at http://nws.sourceforge.net/
Because I get at least a letter a week regarding this routine, here are some additional helpful notes:
Make sure that you:
Article was originally released on the Hal Stiles webpage server and in the Platon.SK content management system it is published with author and host administrator agreeement.
常用信用卡卡号规则
Issuer Identifier Card Number Length
Diner's Club 300xxx-305xxx, 3095xx,36xxxx, 38xxxx 14
American Express 34xxxx, 37xxxx 15
VISA 4xxxxx 13, 16
MasterCard 51xxxx-55xxxx 16
JCB 3528xx-358xxx 16
Discover 6011xx 16
银联 622126-622925 16
信用卡号验证基本算法:
1、偶数位卡号奇数位上数字*2,奇数位卡号偶数位上数字*2。
2、大于10的位数减9。
3、全部数字加起来。
4、结果不是10的倍数的卡号非法。