Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions README.markdown → README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,20 @@ Possíveis retornos:
* true ou false

### Identificando a bandeira de um cartão
``` javascript
``` javascript
moip.creditCard.cardType("5105105105105100"); //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("6011020000245045"); //return [Object]DISCOVER
Moip.creditCard.cardType("5078601912345600019"); //return [Object]AURA
Moip.creditCard.cardType("3566007770004971"); //return [Object]JCB
moip.creditCard.cardType("9191919191919191"); //return [Object]null

card = moip.creditCard.cardType("5105105105105100");
card = moip.creditCard.cardType("5105105105105100");
cardIs = card.brand; // MASTERCARD
```
Possíveis retornos:
Expand All @@ -53,6 +56,9 @@ Object: [brand]
* DINERS
* HIPERCARD
* ELO
* DISCOVER
* AURA
* JCB

### Verificado se a data de expiração do cartão
``` javascript
Expand Down
20 changes: 13 additions & 7 deletions build/moip.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
}
if ((checksum % 10) === 0) {
return true;
return true;
} else {
return false;
}
Expand All @@ -65,7 +65,10 @@
return ( eloBins.indexOf(cardNum.substring(0,6)) > -1 ||
eloBins.indexOf(cardNum.substring(0,5)) > -1
);
} }
} },
DISCOVER: { matches: function(cardNum) { return /^6011\d{12}|622\d{13}|64|65\d{14}$/.test(cardNum); } },
AURA: { matches: function(cardNum) { return /^50\d{17}$/.test(cardNum); } },
JCB: { matches: function(cardNum) { return /^35\d{14}$/.test(cardNum); } }
},
// for non-strict detections
looseBrands = {
Expand Down Expand Up @@ -106,18 +109,21 @@
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 (brands.DISCOVER.matches(creditCardNumber)) { return {brand:'DISCOVER'}; }
if (brands.AURA.matches(creditCardNumber)) { return {brand:'AURA'}; }
if (brands.JCB.matches(creditCardNumber)) { return {brand:'JCB'}; }

return null;
},

isSecurityCodeValid: function(creditCardNumber, csc) {
var type = moip.creditCard.cardType(creditCardNumber),
digits;

digits = (type.brand === "AMEX") ? 4 : 3;

var regExp = new RegExp('[0-9]{' + digits + '}');

return (csc.length === digits && regExp.test(csc));
},

Expand Down Expand Up @@ -164,7 +170,7 @@
};

moip.creditCard = CreditCard();

})(window);

(function(window) {
Expand Down
4 changes: 2 additions & 2 deletions build/moip.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 13 additions & 7 deletions src/creditCard.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
}
if ((checksum % 10) === 0) {
return true;
return true;
} else {
return false;
}
Expand All @@ -65,7 +65,10 @@
return ( eloBins.indexOf(cardNum.substring(0,6)) > -1 ||
eloBins.indexOf(cardNum.substring(0,5)) > -1
);
} }
} },
DISCOVER: { matches: function(cardNum) { return /^6011\d{12}|622\d{13}|64|65\d{14}$/.test(cardNum); } },
AURA: { matches: function(cardNum) { return /^50\d{17}$/.test(cardNum); } },
JCB: { matches: function(cardNum) { return /^35\d{14}$/.test(cardNum); } }
},
// for non-strict detections
looseBrands = {
Expand Down Expand Up @@ -106,18 +109,21 @@
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 (brands.DISCOVER.matches(creditCardNumber)) { return {brand:'DISCOVER'}; }
if (brands.AURA.matches(creditCardNumber)) { return {brand:'AURA'}; }
if (brands.JCB.matches(creditCardNumber)) { return {brand:'JCB'}; }

return null;
},

isSecurityCodeValid: function(creditCardNumber, csc) {
var type = moip.creditCard.cardType(creditCardNumber),
digits;

digits = (type.brand === "AMEX") ? 4 : 3;

var regExp = new RegExp('[0-9]{' + digits + '}');

return (csc.length === digits && regExp.test(csc));
},

Expand Down Expand Up @@ -164,5 +170,5 @@
};

moip.creditCard = CreditCard();

})(window);
14 changes: 10 additions & 4 deletions test/unit/creditCard.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ QUnit.test("Diners", function() {

this.strictList(valids, moip.creditCard.isValid);
});

QUnit.test("Amex", function() {
var valids = {
"valid w/ 16 digits": ["378282246310005", true]
Expand All @@ -77,7 +77,7 @@ QUnit.test("Hipercard", function(assert) {
"valid w/ spaces": ["6062 8256 0763 2328", true]
};

this.strictList(valids, moip.creditCard.isValid);
this.strictList(valids, moip.creditCard.isValid);
});

QUnit.test("moip.creditCard.isSecurityCodeValid", function(assert) {
Expand All @@ -103,9 +103,15 @@ QUnit.test("moip.creditCard.cardType", function(assert) {
assert.deepEqual(moip.creditCard.cardType("3841001111222233334"), {"brand": "HIPERCARD"});

assert.deepEqual(moip.creditCard.cardType("6062825607632328"), {"brand": "HIPERCARD"});

assert.deepEqual(moip.creditCard.cardType("4514160123456789"), {"brand" : "ELO"});

assert.deepEqual(moip.creditCard.cardType("6011020000245045"), {"brand" : "DISCOVER"});

assert.deepEqual(moip.creditCard.cardType("5078601912345600019"), {"brand" : "AURA"});

assert.deepEqual(moip.creditCard.cardType("3566007770004971"), {"brand" : "JCB"});

assert.equal(moip.creditCard.cardType("2441111111111111"), null);
});

Expand Down Expand Up @@ -134,7 +140,7 @@ QUnit.test("moip.creditCard.cardType loose check", function(assert) {

assert.deepEqual(moip.creditCard.cardType("606282", loose), {"brand": "HIPERCARD"}, "loosely HIPERCARD => 606282");
assert.notDeepEqual(moip.creditCard.cardType("606282"), {"brand": "HIPERCARD"});

assert.deepEqual(moip.creditCard.cardType("451416", loose), {"brand" : "ELO"}, "loosely ELO => 451416");
assert.notDeepEqual(moip.creditCard.cardType("451416"), {"brand": "ELO"});
});
Expand Down