validateCC(); function checkCC(field) { var number = $(field).value number = number.replace(/[^\d]/g,""); var msg = ''; var success = false; if (number.length > 4 ) { var cards = new Array(); cards [0] = {name: "Visa", regexp: /^4\d{12}(\d{3})?$/}; cards [1] = {name: "Master Card", regexp: /^(5[1-5]\d{4}|677189)\d{10}$/}; cards [2] = {name: "American Express", regexp: /^3[47]\d{13}$/}; cards [3] = {name: "Discover", regexp: /^(6011|65\d{2})\d{12}$/}; var card_type = -1; for (var i=0; cards.length > i; i++) { if (number.match(cards[i].regexp)) { card_type = i; break; } } var total_checksum = 0; var ch = ""; var multiplier = 1; var checksum = 0; for (i = number.length-1; i >= 0; i--) { checksum = parseInt(number.charAt(i)) * multiplier; if (checksum > 9) { checksum = checksum - 9; } total_checksum = total_checksum + checksum; if (multiplier == 1) { multiplier = 2; } else { multiplier = 1; } } var bad_checksum = total_checksum % 10 != 0; msg = 'Invalid'; if (!bad_checksum && card_type >= 0) { success = true; msg = cards[card_type].name $(field).value = number.replace(/(\d{4})(\d{4})(\d{4})(\d+)/, "$1 $2 $3 $4") } } return {success : success, msg : msg}; } function validateCC() { var check = checkCC('payment_profile_number'); var msg = ''; if (check.msg.length > 0) { msg = "Your card: " + check.msg + (check.success ? ", ok!" : ""); } $('credit_card_validation').innerHTML = msg; }