CheckInvoices

Run Settings
LanguageJavaScript
Language Version
Run Command
// Función para calcular la letra del NIF a partir de los 8 dígitos function calcularLetraNIF(numeroDNI) { const letras = "TRWAGMYFPDXBNJZSQVHLCKE"; const dni = parseInt(numeroDNI, 10); if (isNaN(dni) || dni < 0 || dni > 99999999) return null; return letras.charAt(dni % 23); } // Función para calcular la letra del NIE a partir del NIE sin la letra de control function calcularLetraNIE(nieSinLetra) { const letras = "TRWAGMYFPDXBNJZSQVHLCKE"; const mapaInicial = { X: '0', Y: '1', Z: '2' }; const primera = nieSinLetra.charAt(0); if (!mapaInicial.hasOwnProperty(primera)) return null; const numero = mapaInicial[primera] + nieSinLetra.slice(1); return letras.charAt(parseInt(numero, 10) % 23); } // Función para calcular el dígito de control del CIF a partir de los 8 primeros caracteres function calcularDigitoControlCIF(ochoChars) { const letrasControl = "JABCDEFGHI"; const inicial = ochoChars.charAt(0); const nums = ochoChars.slice(1); let sumaPar = 0, sumaImpar = 0; for (let i = 0; i < nums.length; i++) { const n = parseInt(nums.charAt(i), 10); if ((i + 1) % 2 === 0) { sumaPar += n; } else { let d = n * 2; if (d > 9) d -= 9; sumaImpar += d; } } const total = sumaPar + sumaImpar; const unidad = total % 10; const dig = unidad === 0 ? 0 : 10 - unidad; // Según tipo de entidad, puede ser letra o número if ("PQSKW".includes(inicial)) { return letrasControl.charAt(dig); } if ("ABEH".includes(inicial)) { return String(dig); } return letrasControl.charAt(dig); } // Funciones de validación que reciben el código completo y devuelven true/false function validarNIF(nif) { const num = nif.slice(0, 8); const letra = nif.charAt(8); const calc = calcularLetraNIF(num); return calc !== null && calc === letra; } function validarNIE(nie) { const sinLetra = nie.slice(0, 8); const letra = nie.charAt(8); const calc = calcularLetraNIE(sinLetra); return calc !== null && calc === letra; } function validarCIF(cif) { const ocho = cif.slice(0, 8); const control = cif.charAt(8); const calc = calcularDigitoControlCIF(ocho); return calc !== null && calc === control; } // Función principal que identifica el tipo y valida function identificarYValidar(codigo) { const c = codigo.toUpperCase().replace(/\s|-/g, ''); let res = false; if (/^[0-9]{8}[A-Z]$/.test(c)) { res = validarNIF(c); } else if (/^[XYZ][0-9]{7}[A-Z]$/.test(c)) { res = validarNIE(c); } else if (/^[ABCDEFGHJKLMNPQRSUVW][0-9]{7}[0-9A-J]$/.test(c)) { res = validarCIF(c); } return res; } //return input.map(item => identificarYValidar(item.code))[0]; //console.log(identificarYValidar('12345678Z')); function run(input) { // identificarYValidar solo devuelve true o false //return input.map(item => identificarYValidar(item.code))[0]; return identificarYValidar(input[0].code); } //const output = run([{ code: "12345678Z" }]); //console.log(output);
Editor Settings
Theme
Key bindings
Full width
Lines