Skip to content

Commit 4f483dd

Browse files
committed
modified PR
1 parent 17a2043 commit 4f483dd

File tree

4 files changed

+78
-95
lines changed

4 files changed

+78
-95
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
function validateCreditCard(number) {
2+
// Convert input to a string so we can check characters easily
3+
const numStr = String(number);
4+
5+
// Rule 1: Must be 16 digits, all numbers
6+
if (!/^\d{16}$/.test(numStr)) {
7+
return false;
8+
}
9+
10+
// Rule 2: Must contain at least two different digits
11+
const uniqueDigits = new Set(numStr);
12+
if (uniqueDigits.size < 2) {
13+
return false;
14+
}
15+
16+
// Rule 3: The last digit must be even
17+
const lastDigit = parseInt(numStr[numStr.length - 1]);
18+
if (lastDigit % 2 !== 0) {
19+
return false;
20+
}
21+
22+
// Rule 4: The sum of all digits must be greater than 16
23+
const sum = numStr
24+
.split("")
25+
.map(Number)
26+
.reduce((a, b) => a + b, 0);
27+
28+
if (sum <= 16) {
29+
return false;
30+
}
31+
32+
// If all checks pass, return true ✅
33+
return true;
34+
}
35+
36+
module.exports = validateCreditCard;
37+
38+
39+
test("valid credit card numbers should return true", () => {
40+
expect(validateCreditCard("9999777788880000")).toBe(true);
41+
expect(validateCreditCard("6666666666661666")).toBe(true);
42+
});
43+
44+
test("invalid cards with letters should return false", () => {
45+
expect(validateCreditCard("a92332119c011112")).toBe(false);
46+
});
47+
48+
test("invalid cards with all same digits should return false", () => {
49+
expect(validateCreditCard("4444444444444444")).toBe(false);
50+
});
51+
52+
test("invalid cards with sum less than 16 should return false", () => {
53+
expect(validateCreditCard("1111111111111110")).toBe(false);
54+
});
55+
56+
test("invalid cards with odd final digit should return false", () => {
57+
expect(validateCreditCard("6666666666666661")).toBe(false);
58+
});

Sprint-3/3-stretch/card-validator.md

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -34,63 +34,4 @@ These are the requirements your project needs to fulfill:
3434

3535
Good luck!
3636

37-
function validateCreditCard(number) {
38-
// Convert input to a string so we can check characters easily
39-
const numStr = String(number);
40-
41-
// Rule 1: Must be 16 digits, all numbers
42-
if (!/^\d{16}$/.test(numStr)) {
43-
return false;
44-
}
45-
46-
// Rule 2: Must contain at least two different digits
47-
const uniqueDigits = new Set(numStr);
48-
if (uniqueDigits.size < 2) {
49-
return false;
50-
}
51-
52-
// Rule 3: The last digit must be even
53-
const lastDigit = parseInt(numStr[numStr.length - 1]);
54-
if (lastDigit % 2 !== 0) {
55-
return false;
56-
}
57-
58-
// Rule 4: The sum of all digits must be greater than 16
59-
const sum = numStr
60-
.split("")
61-
.map(Number)
62-
.reduce((a, b) => a + b, 0);
63-
64-
if (sum <= 16) {
65-
return false;
66-
}
67-
68-
// If all checks pass, return true ✅
69-
return true;
70-
}
71-
72-
module.exports = validateCreditCard;
73-
74-
const validateCreditCard = require("./validateCreditCard");
75-
76-
test("valid credit card numbers should return true", () => {
77-
expect(validateCreditCard("9999777788880000")).toBe(true);
78-
expect(validateCreditCard("6666666666661666")).toBe(true);
79-
});
80-
81-
test("invalid cards with letters should return false", () => {
82-
expect(validateCreditCard("a92332119c011112")).toBe(false);
83-
});
84-
85-
test("invalid cards with all same digits should return false", () => {
86-
expect(validateCreditCard("4444444444444444")).toBe(false);
87-
});
88-
89-
test("invalid cards with sum less than 16 should return false", () => {
90-
expect(validateCreditCard("1111111111111110")).toBe(false);
91-
});
92-
93-
test("invalid cards with odd final digit should return false", () => {
94-
expect(validateCreditCard("6666666666666661")).toBe(false);
95-
});
9637

Sprint-3/3-stretch/password-validator.js

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,3 @@ function passwordValidator(password) {
44

55

66
module.exports = passwordValidator;
7-
function validateCreditCard(number) {
8-
// Convert input to a string so we can check characters easily
9-
const numStr = String(number);
10-
11-
// Rule 1: Must be 16 digits, all numbers
12-
if (!/^\d{16}$/.test(numStr)) {
13-
return false;
14-
}
15-
16-
// Rule 2: Must contain at least two different digits
17-
const uniqueDigits = new Set(numStr);
18-
if (uniqueDigits.size < 2) {
19-
return false;
20-
}
21-
22-
// Rule 3: The last digit must be even
23-
const lastDigit = parseInt(numStr[numStr.length - 1]);
24-
if (lastDigit % 2 !== 0) {
25-
return false;
26-
}
27-
28-
// Rule 4: The sum of all digits must be greater than 16
29-
const sum = numStr
30-
.split("")
31-
.map(Number)
32-
.reduce((a, b) => a + b, 0);
33-
34-
if (sum <= 16) {
35-
return false;
36-
}
37-
38-
// If all checks pass, return true ✅
39-
return true;
40-
}
41-
42-
module.exports = validateCreditCard;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
test("valid credit card numbers should return true", () => {
2+
expect(validateCreditCard("9999777788880000")).toBe(true);
3+
expect(validateCreditCard("6666666666661666")).toBe(true);
4+
});
5+
6+
test("invalid cards with letters should return false", () => {
7+
expect(validateCreditCard("a92332119c011112")).toBe(false);
8+
});
9+
10+
test("invalid cards with all same digits should return false", () => {
11+
expect(validateCreditCard("4444444444444444")).toBe(false);
12+
});
13+
14+
test("invalid cards with sum less than 16 should return false", () => {
15+
expect(validateCreditCard("1111111111111110")).toBe(false);
16+
});
17+
18+
test("invalid cards with odd final digit should return false", () => {
19+
expect(validateCreditCard("6666666666666661")).toBe(false);
20+
});

0 commit comments

Comments
 (0)