Skip to content

Commit

Permalink
added checksum feature
Browse files Browse the repository at this point in the history
  • Loading branch information
vigneshbalaji07 committed Jun 27, 2023
1 parent 0601f8d commit d9c54fe
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 1 deletion.
33 changes: 33 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,41 @@ function detectCardType(cardNumber) {
}
}

function validateCreditCardNumber(cardNumber) {
// Remove any spaces or dashes from the card number
cardNumber = cardNumber.replace(/[^\d]/g, "");

// Check if the card number is empty or not a number
if (cardNumber === "" || isNaN(cardNumber)) {
return false;
}

// Reverse the card number and convert it to an array
var cardNumberArray = cardNumber.split("").reverse();

// Apply the Luhn algorithm
var sum = 0;
for (var i = 0; i < cardNumberArray.length; i++) {
var num = parseInt(cardNumberArray[i], 10);

if (i % 2 === 1) {
num *= 2;

if (num > 9) {
num -= 9;
}
}

sum += num;
}

// The card number is valid if the sum is divisible by 10
return sum % 10 === 0;
}

module.exports = {
isCreditCard,
isEncryptedToken,
detectCardType,
validateCreditCardNumber,
};
19 changes: 18 additions & 1 deletion test/index.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
const { isCreditCard, isEncryptedToken, detectCardType } = require("../index");
const {
isCreditCard,
isEncryptedToken,
detectCardType,
validateCreditCardNumber,
} = require("../index");

describe("Testing credit card Functionality", () => {
test("should return true for valida cards", () => {
Expand Down Expand Up @@ -39,3 +44,15 @@ describe("Testing Card Type", () => {
expect(detectCardType("45320112890368")).toBe("invalid");
});
});

describe("Validate the card number", () => {
test("should return true for valid card number", () => {
expect(validateCreditCardNumber("6011111111111117")).toBe(true);
expect(validateCreditCardNumber("6011601160116611")).toBe(true);
expect(validateCreditCardNumber("6011000990139424")).toBe(true);
expect(validateCreditCardNumber("30569309025904")).toBe(true);
});

test("should return false for invalid card number", () => {});
expect(validateCreditCardNumber("42428974842424242")).toBe(false);
});

0 comments on commit d9c54fe

Please sign in to comment.