Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
7051CEM_Web_Applications_and_AI/src/cfy/connection/ValidateCard.java
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
131 lines (113 sloc)
3.24 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package cfy.connection; | |
public class ValidateCard { | |
public static final int INVALID = -1; | |
public static final int VISA = 0; | |
public static final int MASTERCARD = 1; | |
public static final int AMERICAN_EXPRESS = 2; | |
public static final int EN_ROUTE = 3; | |
public static final int DINERS_CLUB = 4; | |
private static final String[] cardNames = { "Visa", "Mastercard", "American Express", "En Route", | |
"Diner's CLub/Carte Blanche", }; | |
/** | |
* Valid a Credit Card number | |
*/ | |
public boolean validCC(String number) throws Exception { | |
int CardID; | |
if ((CardID = getCardID(number)) != -1) | |
return validCCNumber(number); | |
return false; | |
} | |
/** | |
* Get the Card type returns the credit card type INVALID = -1; VISA = 0; | |
* MASTERCARD = 1; AMERICAN_EXPRESS = 2; EN_ROUTE = 3; DINERS_CLUB = 4; | |
*/ | |
public int getCardID(String number) { | |
int valid = INVALID; | |
String digit1 = number.substring(0, 1); | |
String digit2 = number.substring(0, 2); | |
String digit3 = number.substring(0, 3); | |
String digit4 = number.substring(0, 4); | |
if (isNumber(number)) { | |
/* | |
* ---- VISA prefix=4 ---- length=13 or 16 (can be 15 too!?! maybe) | |
*/ | |
if (digit1.equals("4")) { | |
if (number.length() == 13 || number.length() == 16) | |
valid = VISA; | |
} | |
/* | |
* ---------- MASTERCARD prefix= 51 ... 55 ---------- length= 16 | |
*/ | |
else if (digit2.compareTo("51") >= 0 && digit2.compareTo("55") <= 0) { | |
if (number.length() == 16) | |
valid = MASTERCARD; | |
} | |
/* | |
* ---- AMEX prefix=34 or 37 ---- length=15 | |
*/ | |
else if (digit2.equals("34") || digit2.equals("37")) { | |
if (number.length() == 15) | |
valid = AMERICAN_EXPRESS; | |
} | |
/* | |
* ----- ENROU prefix=2014 or 2149 ----- length=15 | |
*/ | |
else if (digit4.equals("2014") || digit4.equals("2149")) { | |
if (number.length() == 15) | |
valid = EN_ROUTE; | |
} | |
/* | |
* ----- DCLUB prefix=300 ... 305 or 36 or 38 ----- length=14 | |
*/ | |
else if (digit2.equals("36") || digit2.equals("38") | |
|| (digit3.compareTo("300") >= 0 && digit3.compareTo("305") <= 0)) { | |
if (number.length() == 14) | |
valid = DINERS_CLUB; | |
} | |
} | |
return valid; | |
/* | |
* ---- DISCOVER card prefix = 60 -------- lenght = 16 left as an exercise ... | |
*/ | |
} | |
public boolean isNumber(String n) { | |
try { | |
double d = Double.valueOf(n).doubleValue(); | |
return true; | |
} catch (NumberFormatException e) { | |
e.printStackTrace(); | |
return false; | |
} | |
} | |
public String getCardName(int id) { | |
return (id > -1 && id < cardNames.length ? cardNames[id] : ""); | |
} | |
public boolean validCCNumber(String n) { | |
try { | |
/* | |
** known as the LUHN Formula (mod10) | |
*/ | |
int j = n.length(); | |
String[] s1 = new String[j]; | |
for (int i = 0; i < n.length(); i++) | |
s1[i] = "" + n.charAt(i); | |
int checksum = 0; | |
for (int i = s1.length - 1; i >= 0; i -= 2) { | |
int k = 0; | |
if (i > 0) { | |
k = Integer.valueOf(s1[i - 1]).intValue() * 2; | |
if (k > 9) { | |
String s = "" + k; | |
k = Integer.valueOf(s.substring(0, 1)).intValue() + Integer.valueOf(s.substring(1)).intValue(); | |
} | |
checksum += Integer.valueOf(s1[i]).intValue() + k; | |
} else | |
checksum += Integer.valueOf(s1[0]).intValue(); | |
} | |
return ((checksum % 10) == 0); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
return false; | |
} | |
} | |
} |