Credit Card Validation
Credit Card Validation script
HTML
<div>
<input id="cc" type="text" /><span id="type"></span>
</div>
CSS
div{
margin: 10px 10px 10px 10px;
}
input[type=text]{
margin-right: 10px;
}
.error{
border-color: red;
color: red;
}
span{
color: gray;
}
JavaScript
function CCValidationWithType(cardNumber) {
var response = {
valid: false,
type: "Invalid"
};
var cardNumberWithoutDashes = cardNumber.split("-").join("");
if (cardNumberWithoutDashes.length > 16 || cardNumberWithoutDashes.length < 14) {
response.type = "Not a Credit Card Number";
return response;
}
var regExpressions = {
"Visa": /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/,
// Visa: length 16, prefix 4, dashes optional.
"MasterCard": /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/,
// Mastercard: length 16, prefix 51-55, dashes optional.
"Discover": /^6011-?\d{4}-?\d{4}-?\d{4}$/,
// Discover: length 16, prefix 6011, dashes optional.
"American Express": /^3[4,7]\d{13}$/,
// American Express: length 15, prefix 34 or 37.
"Diners": /^3[0,6,8]\d{12}$/ // Diners: length 14, prefix 30, 36, or 38.
};
for (var cardType in regExpressions) {
var exp = regExpressions[cardType];
if (exp.test(cardNumber)) {
response.type = cardType;
break;
}
continue;
}
// Checksum ("Mod 10")
// Add even digits in even length strings or odd digits in odd length strings.
var checksum = 0;
for (var i = (2 - (cardNumberWithoutDashes.length % 2)); i <= cardNumberWithoutDashes.length; i += 2) {
checksum += parseInt(cardNumberWithoutDashes.charAt(i - 1));
}
// Analyze odd digits in even length strings or even digits in odd length strings.
for (var i = (cardNumberWithoutDashes.length % 2) + 1; i < cardNumberWithoutDashes.length; i += 2) {
var digit = parseInt(cardNumberWithoutDashes.charAt(i - 1)) * 2;
if (digit < 10) {
checksum += digit;
} else {
checksum += (digit - 9);
}
}
if ((checksum % 10) == 0) {
response.valid = true;
}else{
response.valid = false;
response.type = "Invalid " + response.type +...