UNPKG

validador-digito-verificador-chile

Version:

Librería que valida si el rut ingresado es valido, calcula el digito verificador, limpia y formatea run

123 lines (119 loc) 3.27 kB
/** * Valida el Digito Verificador del RUN ingresado * @param {string} run - Ingresa el run * @returns {boolean} Devuelve true cuando es un rut valido, false cuando es invalido y null cuando ocurre un error */ function Validar(run) { try { let rut = Limpiar(run); let resultado = CalcularDV(rut.numero); if (resultado === rut.dv) { return true; } else { return false; } } catch (error) { console.error("Ocurrio un error al tratar de validar"); return null; } } /** * Calcula el Digito verificador de un RUN * @param {string} numero - Ingresa el run sin digito verificador * @returns {boolean} Devuelve el digito verificador como string y cuando ocurre un error devuelve null */ function ObtenerDV(numero) { try { if (numero.includes("-")) throw new Error("No debe incluir DV"); let num = Limpiar(numero, false).numero; let dv = CalcularDV(num); // console.log(dv); return dv; } catch (error) { console.log(error); return null; } } /** * Limpia un RUN * @param {string} run - Ingresa el run * @returns {object} Devuelve un objeto con el numero y dv */ function Limpiar(run) { try { let runLimpio = run.replaceAll(/[^0-9]/g, ""); let numero = null; let dv = null; if (run.includes("-")) { numero = runLimpio.slice(0, runLimpio.length - 1); dv = runLimpio.slice(runLimpio.length - 1, runLimpio.length); } else { numero = runLimpio.slice(0, runLimpio.length); dv = null; } return { numero: numero, dv: dv }; } catch (error) { console.log("Ocurrio un error al limpiar RUN"); } } /** * Limpia un RUN * @param {string} run - Ingresa el run con digito verificador * @param {boolean} puntos - Si es true agrega . al run final, por defecto es false * @returns {string} Devuelve un string con formato 11111111-1 y si puntos es true devuelve 11.111.111-1 */ function DarFormato(run, puntos = false) { try { let resultado = ""; let runLimpio = run.replaceAll(/[^0-9]/g, ""); let offset = 0; runLimpio.length == 8 ? (offset = 1) : (offset = 0); for (let i = 0; i < runLimpio.length; i++) { resultado += runLimpio[i]; if ((i == 1 - offset || i == 4 - offset) && puntos) { resultado += "."; } if (i == 7 - offset) { resultado += "-"; } } // console.log(resultado); return resultado; } catch (error) { console.log("Ocurrio un error al dar formato a RUN"); } } function CalcularDV(numero) { try { let multiplicador = 2; let suma = 0; for (let i = numero.length - 1; i >= 0; i--) { suma += numero[i] * multiplicador; if (multiplicador == 7) { multiplicador = 2; } else { multiplicador++; } } let modulo = 11 - (suma % 11); let dv = ""; dv = String(modulo); if (modulo === 11) { dv = "0"; } if (modulo == 10) { dv = "k"; } return dv; } catch { console.error("Ocurrio un error al tratar de calcular el DV"); return null; } } const dv = { DarFormato, Limpiar, Validar, ObtenerDV, }; export default dv;