UNPKG

ci-validation

Version:

đŸ‡șđŸ‡Ÿ Complete TypeScript/JavaScript library for validating Uruguayan CI (CĂ©dula de Identidad) with official algorithm and government service integration

72 lines ‱ 2.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UruguayanCiValidator = void 0; class UruguayanCiValidator { constructor() { this.CI_LENGTH = 8; this.MIN_CI_LENGTH = 7; this.MULTIPLIERS = [2, 9, 8, 7, 6, 3, 4]; } /** * Valida una cĂ©dula de identidad uruguaya completa */ validate(ci) { if (!this.validateFormat(ci)) { return false; } const normalizedCi = this.normalize(ci); const ciWithoutCheckDigit = normalizedCi.slice(0, 7); const providedCheckDigit = parseInt(normalizedCi.slice(7), 10); const calculatedCheckDigit = this.calculateCheckDigit(ciWithoutCheckDigit); return providedCheckDigit === calculatedCheckDigit; } /** * Normaliza la cĂ©dula agregando ceros a la izquierda */ normalize(ci) { const cleanCi = this.sanitize(ci); return cleanCi.padStart(this.CI_LENGTH, "0"); } /** * Valida el formato bĂĄsico de la cĂ©dula */ validateFormat(ci) { if (!ci || typeof ci !== "string") { return false; } const cleanCi = this.sanitize(ci); // Verificar que solo contenga nĂșmeros despuĂ©s de limpiar if (!/^\d+$/.test(cleanCi)) { return false; } // Verificar que el input original no contenga caracteres alfabĂ©ticos if (/[a-zA-Z]/.test(ci)) { return false; } // Verificar longitud return cleanCi.length >= this.MIN_CI_LENGTH && cleanCi.length <= this.CI_LENGTH; } /** * Calcula el dĂ­gito verificador segĂșn el algoritmo uruguayo */ calculateCheckDigit(ciWithoutCheckDigit) { if (ciWithoutCheckDigit.length !== 7) { throw new Error("CI debe tener exactamente 7 dĂ­gitos para calcular el verificador"); } let sum = 0; for (let i = 0; i < 7; i++) { const digit = parseInt(ciWithoutCheckDigit[i], 10); sum += digit * this.MULTIPLIERS[i]; } const remainder = sum % 10; return remainder === 0 ? 0 : 10 - remainder; } /** * Limpia la cĂ©dula de caracteres no numĂ©ricos */ sanitize(ci) { return ci.replace(/\D/g, ""); } } exports.UruguayanCiValidator = UruguayanCiValidator; //# sourceMappingURL=CiValidator.js.map