Credit card validation in Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class CreditCard {
//Credit Card Types
public static final int INVALID = -1;
public static final int MASTERCARD = 1;
public static final int AMEX = 2;
public static final int VISA = 0;
boolean k = validCC("4111111111111111");
private static final String [] cardNames = { "Visa" ,
"Mastercard",
"American Express",
};
/* Validate Credit Card number */
public static boolean validCC(String number) {
int CardID;
if ( (CardID = getCardID(number)) != -1)
return validCCNumber(number);
return false;
}
public static 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
** if so then length=13 or 16
*/
if (digit1.equals("4")) {
if (number.length() == 13 || number.length() == 16)
valid = VISA;
}
/* ----------
** MASTERCARD prefix= 51 ... 55
** and the String length= 16
*/
else if (digit2.compareTo("51")>=0 && digit2.compareTo("55")<=0) {
if (number.length() == 16)
valid = MASTERCARD;
}
/* ----
** AMEX prefix=34 or 37
** and String length=15
*/
else if (digit2.equals("34") || digit2.equals("37")) {
if (number.length() == 15)
valid = AMEX;
}
}
return valid;
/* ----
** DISCOVER card prefix = 60
** string Length = 16
** left as an exercise ...
*/
}
public static boolean isNumber(String n) {
try {
double d = Double.valueOf(n).doubleValue();
return true;
}
catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
}
public static String getCardName(int id) {
return (id > -1 && id < cardNames.length ? cardNames[id] : "");
}
public static boolean validCCNumber(String n) {
try {
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;
}
}
public static void main(String args[]) throws Exception {
String aCard = "";
if (args.length > 0)
aCard = args[0];
else {
BufferedReader input =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the Card number : ");
aCard = input.readLine();
}
if (getCardID(aCard) > -1) {
System.out.println("This is a Valid Credit Card");
System.out.println("and the Card Type is " + getCardName(getCardID(aCard)));
}
else
System.out.println("Sorry this is an invalid Credit Card Number");
}
}
Output:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class CreditCard {
//Credit Card Types
public static final int INVALID = -1;
public static final int MASTERCARD = 1;
public static final int AMEX = 2;
public static final int VISA = 0;
boolean k = validCC("4111111111111111");
private static final String [] cardNames = { "Visa" ,
"Mastercard",
"American Express",
};
/* Validate Credit Card number */
public static boolean validCC(String number) {
int CardID;
if ( (CardID = getCardID(number)) != -1)
return validCCNumber(number);
return false;
}
public static 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
** if so then length=13 or 16
*/
if (digit1.equals("4")) {
if (number.length() == 13 || number.length() == 16)
valid = VISA;
}
/* ----------
** MASTERCARD prefix= 51 ... 55
** and the String length= 16
*/
else if (digit2.compareTo("51")>=0 && digit2.compareTo("55")<=0) {
if (number.length() == 16)
valid = MASTERCARD;
}
/* ----
** AMEX prefix=34 or 37
** and String length=15
*/
else if (digit2.equals("34") || digit2.equals("37")) {
if (number.length() == 15)
valid = AMEX;
}
}
return valid;
/* ----
** DISCOVER card prefix = 60
** string Length = 16
** left as an exercise ...
*/
}
public static boolean isNumber(String n) {
try {
double d = Double.valueOf(n).doubleValue();
return true;
}
catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
}
public static String getCardName(int id) {
return (id > -1 && id < cardNames.length ? cardNames[id] : "");
}
public static boolean validCCNumber(String n) {
try {
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;
}
}
public static void main(String args[]) throws Exception {
String aCard = "";
if (args.length > 0)
aCard = args[0];
else {
BufferedReader input =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the Card number : ");
aCard = input.readLine();
}
if (getCardID(aCard) > -1) {
System.out.println("This is a Valid Credit Card");
System.out.println("and the Card Type is " + getCardName(getCardID(aCard)));
}
else
System.out.println("Sorry this is an invalid Credit Card Number");
}
}
Output:
Enter the Card number :
4111111111111111
This is a Valid Credit Card and the Card Type is Visa
No comments:
Post a Comment