-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.js
161 lines (150 loc) · 4.7 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/* Here are some sample arrays of valid, invalid, and unknown credit card numbers, and an array of all of these arrays
// All valid credit card numbers
const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9];
const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6];
const valid4 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5];
const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6];
// All invalid credit card numbers
const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5];
const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3];
const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4];
const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5];
const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4];
// Can be either valid or invalid
const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4];
const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9];
const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3];
const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3];
const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3];
// An array of all the arrays above
const batch = [
valid1,
valid2,
valid3,
valid4,
valid5,
invalid1,
invalid2,
invalid3,
invalid4,
invalid5,
mystery1,
mystery2,
mystery3,
mystery4,
mystery5,
];
// Functions are below
*/
// Validate credit card numbers
const validateCred = arr => {
let temp = arr.slice().reverse();
for (let i = 1; i < temp.length; i += 2) {
temp[i] *= 2;
if (temp[i] > 9) {
temp[i] -= 9;
}
}
const result =
temp
.slice()
.reverse()
.reduce((a, b) => a + b) %
10 ===
0;
return result;
};
// Return cards that are invalid
const findInvalidCards = arrays => {
let invalidCards = [];
for (const arr of arrays) {
if (!validateCred(arr)) {
invalidCards.push(arr);
}
}
return invalidCards;
};
// Return list of companies that issued invalid cards
const idInvalidCardCompanies = arrays => {
let companies = [];
for (const i of arrays) {
switch (i[0]) {
case 3:
if (!companies.includes('Amex')) {
companies.push('Amex');
}
break;
case 4:
if (!companies.includes('Visa')) {
companies.push('Visa');
}
break;
case 5:
if (!companies.includes('Mastercard')) {
companies.push('Mastercard');
}
break;
case 6:
if (!companies.includes('Discover')) {
companies.push('Discover');
}
break;
default:
if (!companies.includes('Company not found')) {
companies.push('Company not found');
}
break;
}
}
return companies;
};
/* Use parseInt to convert credit card numbers to arrays with numbers. */
const convertString = creditCardNumber => {
let newArr = [];
for (const i of creditCardNumber) {
newArr.push(parseInt(i));
}
return newArr;
};
// Easier way to validate one card
const validate = creditCardNumber => {
let newArr = convertString(creditCardNumber);
return validateCred(newArr);
};
// Tell users if their number is valid or not
const input = document.querySelector('#number');
const output = document.querySelector('#result');
const valid = () => {
let creditCardNumber = input.value;
let result = validate(creditCardNumber);
if (result) {
output.innerHTML = 'Valid';
output.style.color = 'green';
} else {
output.innerHTML = 'Invalid';
output.style.color = 'red';
}
};
// Prevent users from entering invalid characters
const invalidChars = [
"-",
"+",
"e",
];
input.addEventListener("keydown", e => invalidChars.includes(e.key) && e.preventDefault());
// When the user types in an input, run the function
input.addEventListener('keyup', valid);
/*
// Test functions:
console.log(validateCred(valid1)); // Should print true
console.log(validateCred(invalid1)); // Should print false
console.log(findInvalidCards([valid1, valid2, valid3, valid4, valid5])); // Shouldn't print anything
console.log(
findInvalidCards([invalid1, invalid2, invalid3, invalid4, invalid5])
); // Should print all of the numbers
console.log(findInvalidCards(batch)); // Test what the mystery numbers are
console.log(idInvalidCardCompanies([invalid1])); // Should print['visa']
console.log(idInvalidCardCompanies([invalid2])); // Should print ['mastercard']
console.log(idInvalidCardCompanies(batch)); // Find out which companies have mailed out invalid cards
*/