Skip to content

Instantly share code, notes, and snippets.

@alpap
Created September 29, 2018 21:16
Show Gist options
  • Save alpap/aae8618fc366b480cdfd3b00d61566b7 to your computer and use it in GitHub Desktop.
Save alpap/aae8618fc366b480cdfd3b00d61566b7 to your computer and use it in GitHub Desktop.
// card reader
document.onkeypress = function(e) {
e = e || window.event;
var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
// store it , in this example, i use localstorage
if(localStorage.getItem("card") && localStorage.getItem("card") != 'null') {
// append on every keypress
localStorage.setItem("card", localStorage.getItem("card") + String.fromCharCode(charCode));
} else {
// remove localstorage if it takes 300 ms (you can set it)
localStorage.setItem("card", String.fromCharCode(charCode));
setTimeout(function() {
localStorage.removeItem("card");
}, 300);
}
// when reach on certain length within 300 ms, it is not typed by a human being
if(localStorage.getItem("card").length == 8) {
// do some validation
if(passedonvalidation){
// do some action
}
}
}
// another solution
$(document).ready(function(){
$('#creditCardNumber').click(function(){
//document.getElementById('SwipeNowAlert').innerHTML = 'You may now swipe.';
}).blur(function(){
document.getElementById('SwipeNowAlert').innerHTML = 'Don\'t Swipe';
}).focus(function(){
document.getElementById('SwipeNowAlert').innerHTML = 'SWIPE NOW';
}).keyup(function(event) {
if (event.keyCode == 13) {
var ccNum = $('#credit-card-number').val();
var isCaretPresent = false;
var isEqualPresent = false;
if (ccNum.indexOf("^") != -1)
isCaretPresent = true
else
isCaretPresent = false;
if (ccNum.indexOf("=") != -1)
isEqualPresent = true
else
isEqualPresent = false;
//handle parsing differently depending on card format
if (isCaretPresent) {
var cardData = ccNum.split('^');
$("#first-name").val(formatFirstName(cardData[1]));
$("#last-name").val(formatLastName(cardData[1]));
var decryptedCardNumber = formatCardNumber(cardData[0]);
$("#card-number").val(decryptedCardNumber);
$("#card-type").val(getCardType(decryptedCardNumber));
$("#expiration-month").val(cardData[2].substring(2, 4));
$("#expiration-year").val(cardData[2].substring(0, 2));
} else if (isEqualPresent) {
var cardData = ccNum.split('=');
var decryptedCardNumber = formatCardNumber(cardData[0]);
$("#CardNumber").val(decryptedCardNumber);
$("#CardType").val(getCardType(decryptedCardNumber));
$("#ExpirationMonth").val(cardData[2].substring(2, 4));
$("#ExpirationYear").val(cardData[2].substring(0, 2));
}
} else {
return true;
}
});
function formatCardNumber(cardNum) {
var result = "";
result = cardNum.replace(/[^0-9]*/, "");
return result;
}
function formatFirstName(name) {
if (name.indexOf("/") != -1) {
var nameSplit = name.split('/');
return nameSplit[1];
} else {
return "";
}
}
function FormatLastName(name) {
if (name.indexOf("/") != -1) {
var nameSplit = name.split('/');
return nameSplit[0];
} else {
return "";
}
}
function getCardType(number) {
var re = new RegExp("^4");
if (number.match(re) != null)
return "Visa";
re = new RegExp("^(34|37)");
if (number.match(re) != null)
return "American Express";
re = new RegExp("^5[1-5]");
if (number.match(re) != null)
return "MasterCard";
re = new RegExp("^6011");
if (number.match(re) != null)
return "Discover";
return "";
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment