Páginas

05/02/2013

[JS] Detectar qual bandeira do cartão

Recentemente, trabalhando em um e-commerce, o cliente solicitou que detectasse-mos a bandeira do cartão com base no número.
Achei uma ótima referencia aqui: http://www.regular-expressions.info/creditcard.html, alias, esse site é muito foda .. varios exemplos, tudo que você precisa saber sobre regex, você encontra lá.
Fiz aqui essa funçãozinha para retornar a bandeira recebendo o número como parâmetro.



function getCreditCardLabel(cardNumber){

  // Visa: ^4[0-9]{12}(?:[0-9]{3})?$ All Visa card numbers start with a 4. New cards have 16 digits. Old cards have 13.
  // MasterCard: ^5[1-5][0-9]{14}$ All MasterCard numbers start with the numbers 51 through 55. All have 16 digits.
  // American Express: ^3[47][0-9]{13}$ American Express card numbers start with 34 or 37 and have 15 digits.
  // Diners Club: ^3(?:0[0-5]|[68][0-9])[0-9]{11}$ Diners Club card numbers begin with 300 through 305, 36 or 38. All have 14 digits. There are Diners Club cards that begin with 5 and have 16 digits. These are a joint venture between Diners Club and MasterCard, and should be processed like a MasterCard.
  // Discover: ^6(?:011|5[0-9]{2})[0-9]{12}$ Discover card numbers begin with 6011 or 65. All have 16 digits.
  // JCB: ^(?:2131|1800|35\d{3})\d{11}$ JCB cards beginning with 2131 or 1800 have 15 digits. JCB cards beginning with 35 have 16 digits.
  // http://www.regular-expressions.info/creditcard.html

  var regexVisa = /^4[0-9]{12}(?:[0-9]{3})?/;
  var regexMaster = /^5[1-5][0-9]{14}/;
  var regexAmex = /^3[47][0-9]{13}/;
  var regexDiners = /^3(?:0[0-5]|[68][0-9])[0-9]{11}/;
  var regexDiscover = /^6(?:011|5[0-9]{2})[0-9]{12}/;
  var regexJCB = /^(?:2131|1800|35\d{3})\d{11}/;

  if(regexVisa.test(cardNumber)){
   return 'visa';
  }
  if(regexMaster.test(cardNumber)){
   return 'master';
  }
  if(regexAmex.test(cardNumber)){
   return 'amex';
  }
  if(regexDiners.test(cardNumber)){
   return 'diners';
  }
  if(regexDiscover.test(cardNumber)){
   return 'discover';
  }
  if(regexJCB.test(cardNumber)){
   return 'jcb';
  }

  return '';

}

Nenhum comentário: