chilerut
Version:
Una librería con diversas utilidades para el RUN/RUT chileno.
70 lines (61 loc) • 2.12 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});// src/index.ts
function reverseStr(rut) {
return rut.split("").reduce((acc, char) => char + acc, "");
}
function sanitiseRut(rut) {
return rut.toString().replace(/[^\dKk]/g, "");
}
function fullySanitiseRut(rut) {
return rut.toString().replace(/\D/g, "");
}
function getCheckDigit(rut) {
const local = [...reverseStr(fullySanitiseRut(rut))];
let sum = 0;
let v = 2;
for (let i = 0; i < local.length; i++, v < 7 ? v++ : v = 2) {
sum += +local[i] * v;
}
const result = 11 - sum % 11;
if (result === 11) {
return "0";
} else if (result <= 9) {
return result.toString();
} else {
return "K";
}
}
function validateRut(rut) {
const format = /^(?=.{4,12}$)((\d{1,3}(\.\d{3}){0,2})-([\dkK]))$/;
if (!format.test(rut)) {
return false;
}
const sanitised = sanitiseRut(rut);
const correlative = sanitised.slice(0, -1);
const checkDigit = sanitised[sanitised.length - 1];
const verifiedDigit = getCheckDigit(correlative);
return checkDigit.toLowerCase() === verifiedDigit.toLowerCase();
}
var defaultMulOpts = {
count: 30,
dots: true,
hyphen: true
};
var defaultOpts = { dots: true, hyphen: true };
function generateRut(opts = defaultOpts) {
const rut = Math.floor(1e5 + Math.random() * 29e6);
return "" + (opts.dots ? rut.toLocaleString("es-CL") : rut.toString()) + ((opts == null ? void 0 : opts.hyphen) ? "-" : "") + getCheckDigit("" + rut);
}
function generateMulRut(opts = defaultMulOpts) {
if (Object.keys(opts).length === 0) {
return [];
}
const mulRut = new Array(opts.count);
for (let i = 0; i < mulRut.length; i++) {
mulRut[i] = generateRut(opts);
}
return mulRut;
}
function formatRut(rut) {
return new Intl.NumberFormat("es-CL").format(+rut.slice(0, -1)) + "-" + rut[rut.length - 1];
}
exports.formatRut = formatRut; exports.fullySanitiseRut = fullySanitiseRut; exports.generateMulRut = generateMulRut; exports.generateRut = generateRut; exports.getCheckDigit = getCheckDigit; exports.sanitiseRut = sanitiseRut; exports.validateRut = validateRut;