diff --git a/README.markdown b/README.markdown index 65d5086..9a9d9dc 100644 --- a/README.markdown +++ b/README.markdown @@ -16,6 +16,7 @@ Para todas as validações é retornado um boolean se a condição é valida ou ### Validando apenas o número de cartão ``` javascript moip.creditCard.isValid("4111111111111111"); //return true +moip.creditCard.isValid("4111111111111111", ["MASTERCARD", "AMEX"]); //return false moip.creditCard.isValid("4111 1111-1111.1111"); //return true moip.creditCard.isValid("1919191919191919"); //return false moip.creditCard.isValid("41111"); //return false @@ -33,16 +34,16 @@ Possíveis retornos: ### Identificando a bandeira de um cartão ``` javascript -moip.creditCard.cardType("5105105105105100"); //return [Object]MASTERCARD +moip.creditCard.cardType("5105105105105100", ["ELO", "VISA", "MASTERCARD", "AMEX", "HIPERCARD", "DINERS"]); //return [Object]MASTERCARD moip.creditCard.cardType("4111111111111111"); //return [Object]VISA -moip.creditCard.cardType("341111111111111"); //return [Object]AMEX -moip.creditCard.cardType("30569309025904"); //return [Object]DINERS -moip.creditCard.cardType("3841001111222233334"); //return [Object]HIPERCARD -moip.creditCard.cardType("4514160123456789"); //return [Object]ELO -Moip.creditCard.cardType("6370950000000005"); //return [Object]HIPER -moip.creditCard.cardType("9191919191919191"); //return [Object]null +moip.creditCard.cardType("341111111111111", ["ELO", "VISA", "MASTERCARD", "AMEX", "HIPERCARD", "DINERS"]); //return [Object]AMEX +moip.creditCard.cardType("30569309025904", ["ELO", "VISA", "MASTERCARD", "AMEX", "HIPERCARD", "DINERS"]); //return [Object]DINERS +moip.creditCard.cardType("3841001111222233334", ["ELO", "VISA", "MASTERCARD", "AMEX", "HIPERCARD", "DINERS"]); //return [Object]HIPERCARD +moip.creditCard.cardType("4514160123456789", ["ELO", "VISA", "MASTERCARD", "AMEX", "HIPERCARD", "DINERS"]); //return [Object]ELO +Moip.creditCard.cardType("6370950000000005", ["ELO", "VISA", "MASTERCARD", "AMEX", "HIPERCARD", "DINERS"]); //return [Object]HIPER +moip.creditCard.cardType("9191919191919191", ["ELO", "VISA", "MASTERCARD", "AMEX", "HIPERCARD", "DINERS"]); //return [Object]null -card = moip.creditCard.cardType("5105105105105100"); +card = moip.creditCard.cardType("5105105105105100", ["ELO", "VISA", "MASTERCARD", "AMEX", "HIPERCARD", "DINERS"]); cardIs = card.brand; // MASTERCARD ``` Possíveis retornos: diff --git a/build/moip.js b/build/moip.js index 3325305..ad729d5 100644 --- a/build/moip.js +++ b/build/moip.js @@ -45,7 +45,7 @@ } }, - cardType: function(creditCardNumber, loose) { + cardType: function(creditCardNumber, bandeiras, loose) { var brands = { VISA: { matches: function(cardNum){ return /^4\d{15}$/.test(cardNum); } }, MASTERCARD: { matches: function(cardNum){ return /^5[1-5]\d{14}$/.test(cardNum); } }, @@ -100,12 +100,57 @@ // order is mandatory: // a) VISA is identified by the broad prefix '4', shadowing more specific ELO prefixes // b) HIPERCARD has precendence over DINERS for prefix 3841 (loose check) - if (brands.ELO.matches(creditCardNumber)) { return {brand:'ELO'}; } - if (brands.VISA.matches(creditCardNumber)) { return {brand:'VISA'}; } - if (brands.MASTERCARD.matches(creditCardNumber)) { return {brand:'MASTERCARD'}; } - if (brands.AMEX.matches(creditCardNumber)) { return {brand:'AMEX'}; } - if (brands.HIPERCARD.matches(creditCardNumber)) { return {brand:'HIPERCARD'}; } - if (brands.DINERS.matches(creditCardNumber)) { return {brand:'DINERS'}; } + if( bandeiras ){ + if (brands.ELO.matches(creditCardNumber)){ + var index = bandeiras.indexOf("ELO"); + if( index != -1 ){ + return { brand:'ELO' }; + } + return null; + } + if (brands.VISA.matches(creditCardNumber)){ + var index = bandeiras.indexOf("VISA"); + if( index != -1 ){ + return { brand:'VISA' }; + } + return null; + } + if (brands.MASTERCARD.matches(creditCardNumber)){ + var index = bandeiras.indexOf("MASTERCARD"); + if( index != -1 ){ + return { brand:'MASTERCARD' }; + } + return null; + } + if (brands.AMEX.matches(creditCardNumber)){ + var index = bandeiras.indexOf("AMEX"); + if( index != -1 ){ + return { brand:'AMEX' }; + } + return null; + } + if (brands.HIPERCARD.matches(creditCardNumber)){ + var index = bandeiras.indexOf("HIPERCARD"); + if( index != -1 ){ + return { brand:'HIPERCARD' }; + } + return null; + } + if (brands.DINERS.matches(creditCardNumber)){ + var index = bandeiras.indexOf("DINERS"); + if( index != -1 ){ + return { brand:'DINERS' }; + } + return null; + } + }else{ + if (brands.ELO.matches(creditCardNumber)) { return {brand:'ELO'}; } + if (brands.VISA.matches(creditCardNumber)) { return {brand:'VISA'}; } + if (brands.MASTERCARD.matches(creditCardNumber)) { return {brand:'MASTERCARD'}; } + if (brands.AMEX.matches(creditCardNumber)) { return {brand:'AMEX'}; } + if (brands.HIPERCARD.matches(creditCardNumber)) { return {brand:'HIPERCARD'}; } + if (brands.DINERS.matches(creditCardNumber)) { return {brand:'DINERS'}; } + } return null; }, diff --git a/src/creditCard.js b/src/creditCard.js index 72ae019..aa5b6b0 100644 --- a/src/creditCard.js +++ b/src/creditCard.js @@ -45,7 +45,7 @@ } }, - cardType: function(creditCardNumber, loose) { + cardType: function(creditCardNumber, bandeiras, loose) { var brands = { VISA: { matches: function(cardNum){ return /^4\d{15}$/.test(cardNum); } }, MASTERCARD: { matches: function(cardNum){ return /^5[1-5]\d{14}$/.test(cardNum); } }, @@ -100,12 +100,57 @@ // order is mandatory: // a) VISA is identified by the broad prefix '4', shadowing more specific ELO prefixes // b) HIPERCARD has precendence over DINERS for prefix 3841 (loose check) - if (brands.ELO.matches(creditCardNumber)) { return {brand:'ELO'}; } - if (brands.VISA.matches(creditCardNumber)) { return {brand:'VISA'}; } - if (brands.MASTERCARD.matches(creditCardNumber)) { return {brand:'MASTERCARD'}; } - if (brands.AMEX.matches(creditCardNumber)) { return {brand:'AMEX'}; } - if (brands.HIPERCARD.matches(creditCardNumber)) { return {brand:'HIPERCARD'}; } - if (brands.DINERS.matches(creditCardNumber)) { return {brand:'DINERS'}; } + if( bandeiras ){ + if (brands.ELO.matches(creditCardNumber)){ + var index = bandeiras.indexOf("ELO"); + if( index != -1 ){ + return { brand:'ELO' }; + } + return null; + } + if (brands.VISA.matches(creditCardNumber)){ + var index = bandeiras.indexOf("VISA"); + if( index != -1 ){ + return { brand:'VISA' }; + } + return null; + } + if (brands.MASTERCARD.matches(creditCardNumber)){ + var index = bandeiras.indexOf("MASTERCARD"); + if( index != -1 ){ + return { brand:'MASTERCARD' }; + } + return null; + } + if (brands.AMEX.matches(creditCardNumber)){ + var index = bandeiras.indexOf("AMEX"); + if( index != -1 ){ + return { brand:'AMEX' }; + } + return null; + } + if (brands.HIPERCARD.matches(creditCardNumber)){ + var index = bandeiras.indexOf("HIPERCARD"); + if( index != -1 ){ + return { brand:'HIPERCARD' }; + } + return null; + } + if (brands.DINERS.matches(creditCardNumber)){ + var index = bandeiras.indexOf("DINERS"); + if( index != -1 ){ + return { brand:'DINERS' }; + } + return null; + } + }else{ + if (brands.ELO.matches(creditCardNumber)) { return {brand:'ELO'}; } + if (brands.VISA.matches(creditCardNumber)) { return {brand:'VISA'}; } + if (brands.MASTERCARD.matches(creditCardNumber)) { return {brand:'MASTERCARD'}; } + if (brands.AMEX.matches(creditCardNumber)) { return {brand:'AMEX'}; } + if (brands.HIPERCARD.matches(creditCardNumber)) { return {brand:'HIPERCARD'}; } + if (brands.DINERS.matches(creditCardNumber)) { return {brand:'DINERS'}; } + } return null; },