Skip to content

Commit 8bff86e

Browse files
authored
Created: TheFiscalCode Solution
1 parent ec9cce2 commit 8bff86e

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
function fiscalCode(data) {
2+
const monthsConversion = {
3+
'01': 'A', '02': 'B', '03': 'C', '04': 'D', '05': 'E', '06': 'H',
4+
'07': 'L', '08': 'M', '09': 'P', '10': 'R', '11': 'S', '12': 'T'
5+
};
6+
7+
// Helper function to generate code for names and surnames
8+
function generateCode(name, isSurname) {
9+
const vowels = 'AEIOU';
10+
let consonants = '';
11+
let code = '';
12+
13+
// Helper function to check if a character is a consonant
14+
function isConsonant(char) {
15+
return /[BCDFGHJKLMNPQRSTVWXYZ]/.test(char);
16+
}
17+
18+
for (let i = 0; i < name.length && consonants.length < 3; i++) {
19+
const char = name[i].toUpperCase();
20+
if (isConsonant(char)) {
21+
consonants += char;
22+
}
23+
}
24+
25+
if (consonants.length < 3) {
26+
for (let i = 0; i < name.length && consonants.length < 3; i++) {
27+
const char = name[i].toUpperCase();
28+
if (vowels.includes(char)) {
29+
consonants += char;
30+
}
31+
}
32+
}
33+
34+
if (consonants.length < 3) {
35+
consonants += 'X'.repeat(3 - consonants.length);
36+
}
37+
38+
code = consonants;
39+
40+
if (isSurname) {
41+
code += 'XXX';
42+
} else {
43+
code += name.length >= 3 ? name[0] + name[2] + name[3] : name + 'XX';
44+
}
45+
46+
return code;
47+
}
48+
49+
const surnameCode = generateCode(data.surname, true);
50+
const nameCode = generateCode(data.name, false);
51+
52+
const year = data.dob.split('/')[2].slice(-2);
53+
const month = monthsConversion[data.dob.split('/')[1]];
54+
const day = (data.gender === 'F' ? 40 + parseInt(data.dob.split('/')[0]) : parseInt(data.dob.split('/')[0])).toString().padStart(2, '0');
55+
56+
return `${surnameCode}${nameCode}${year}${month}${day}`;
57+
}
58+
59+
// Examples
60+
console.log(fiscalCode({
61+
name: "Matt",
62+
surname: "Edabit",
63+
gender: "M",
64+
dob: "1/1/1900"
65+
})); // ➞ "DBTMTT00A01"
66+
67+
console.log(fiscalCode({
68+
name: "Helen",
69+
surname: "Yu",
70+
gender: "F",
71+
dob: "1/12/1950"
72+
})); // ➞ "YUXHLN50T41"
73+
74+
console.log(fiscalCode({
75+
name: "Mickey",
76+
surname: "Mouse",
77+
gender: "M",
78+
dob: "16/1/1928"
79+
})); // ➞ "MSOMKY28A16"

0 commit comments

Comments
 (0)