Una librería TypeScript/JavaScript completa para validar cédulas de identidad uruguayas siguiendo el algoritmo oficial y consultando información a través de servicios gubernamentales.
🚨 ACTUALIZACIÓN CRÍTICA 07/08/2025: La vulnerabilidad en sistemas gubernamentales ha resurgido. El formulario MEF (https://www.tramitesenlinea.mef.gub.uy) vuelve a exponer fecha de nacimiento y nombres sin autenticación adecuada. El sistema de autenticación implementado no verifica correctamente la identidad. Solo use la validación algorítmica local para evitar comprometer información personal.
npm install ci-validationimport { validateCI } from 'ci-validation';
// Validar cédula
const isValid = validateCI('19119365');
console.log(isValid); // true
// Casos inválidos
console.log(validateCI('12345678')); // false
console.log(validateCI('1234567a')); // falseimport { validateCIAndQuery } from 'ci-validation';
const result = await validateCIAndQuery('19119365');
if (result.success) {
console.log('Cédula válida:', result.data);
// Output (solo validación local - endpoints inhabilitados):
// {
// "ci": "19119365",
// "isValid": true,
// "normalizedCi": "19119365",
// "info": "Validación local únicamente - Servicios gubernamentales no disponibles desde 02/08/2025"
// }
} else {
console.log('Error:', result.error);
}# Instalar globalmente
npm install -g ci-validation
# Validar desde línea de comandos
ci-validate 19119365Valida una cédula uruguaya usando el algoritmo oficial de dígito verificador.
import { validateCI } from 'ci-validation';
console.log(validateCI('19119365')); // true
console.log(validateCI('1911936')); // false (dígito incorrecto)Normaliza una cédula agregando ceros a la izquierda y removiendo caracteres no numéricos.
import { normalizeCI } from 'ci-validation';
console.log(normalizeCI('1234567')); // '01234567'
console.log(normalizeCI('1.234.567-8')); // '12345678'Valida solo el formato (7-8 dígitos numéricos) sin verificar el dígito verificador.
import { validateCIFormat } from 'ci-validation';
console.log(validateCIFormat('1234567')); // true
console.log(validateCIFormat('123456a')); // falseConsulta información oficial sobre una cédula (requiere conexión a internet).
import { queryCIInfo } from 'ci-validation';
const result = await queryCIInfo('19119365');
if (result.success) {
console.log('Información:', result.data);
} else {
console.log('Error:', result.error);
}Combina validación y consulta en una sola función.
import { validateCIAndQuery } from 'ci-validation';
const result = await validateCIAndQuery('19119365');
console.log(result);
// Output (solo validación local - endpoints inhabilitados):
// {
// "success": true,
// "data": {
// "ci": "19119365",
// "isValid": true,
// "normalizedCi": "19119365",
// "info": "Validación local únicamente - Servicios gubernamentales no disponibles desde 02/08/2025"
// }
// }import { UruguayanCiValidator, LoteriaUyCiService } from 'ci-validation';
const validator = new UruguayanCiValidator();
const service = new LoteriaUyCiService();
// Validación personalizada
const ci = '19119365';
const isValid = validator.validate(ci);
const normalized = validator.normalize(ci);
// Consulta con manejo de errores
try {
const info = await service.queryCiInfo(normalized);
console.log(info);
} catch (error) {
console.error('Error al consultar:', error);
}<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/ci-validation@latest/dist/lib/index.js"></script>
</head>
<body>
<script>
const { validateCI } = CiValidation;
console.log(validateCI('19119365')); // true
</script>
</body>
</html>npm install -g ci-validation# Validación simple
ci-validate 19119365
# Validación con consulta
ci-validate 19119365 --query
# Múltiples cédulas
ci-validate 19119365 12345678 87654321
# Ayuda
ci-validate --helpinterface CiQueryResponse {
success: boolean;
data?: any;
error?: string;
}
interface ValidationResult {
success: boolean;
data?: {
ci: string;
isValid: boolean;
normalizedCi: string;
info: any;
};
error?: string;
code?: string;
}# Opcional: Timeout personalizado para consultas (ms)
CI_VALIDATION_TIMEOUT=10000
# Opcional: URL base personalizada
CI_VALIDATION_BASE_URL=custom-url// Configurar timeout
process.env.CI_VALIDATION_TIMEOUT = '15000';
import { LoteriaUyCiService } from 'ci-validation';
const service = new LoteriaUyCiService();import { validateCI, normalizeCI } from 'ci-validation';
describe('CI Validation', () => {
test('should validate correct CI', () => {
expect(validateCI('19119365')).toBe(true);
});
test('should normalize CI', () => {
expect(normalizeCI('1234567')).toBe('01234567');
});
});La validación sigue el algoritmo oficial uruguayo:
- Formato: 7-8 dígitos numéricos
- Normalización: Agregar ceros a la izquierda hasta 8 dígitos
- Cálculo: Aplicar algoritmo de dígito verificador
- Verificación: Comparar con el último dígito
CI: 1911936X (X = dígito a verificar)
Multiplicadores: 2, 9, 8, 7, 6, 3, 4
Cálculo: (1×2 + 9×9 + 1×8 + 1×7 + 9×6 + 3×3 + 6×4) = 185
Módulo: 185 % 10 = 5
Dígito verificador: (10 - 5) % 10 = 5
CI válida: 19119365
- ✅ Sin almacenamiento: No guarda cédulas ni información personal
- ✅ Validación local: El algoritmo se ejecuta localmente (única funcionalidad disponible)
- ❌ Consultas externas: Todos los endpoints gubernamentales inhabilitados desde 02/08/2025
- ✅ Error handling: Manejo robusto de errores de red y endpoints caídos
⚠️ Funcionalidad limitada: Solo validación algorítmica disponible- 🔴 Estado crítico: Servicios oficiales de Lotería y MEF no operativos
- ✅ TypeScript: Tipado completo y autocompletado
- ✅ Cero dependencias: Core sin dependencias externas
- ✅ Universal: Funciona en Node.js y navegadores
- ✅ CLI incluido: Herramienta de línea de comandos
- ✅ Tests incluidos: Suite de tests completa
- ✅ ESM/CJS: Soporta ambos formatos de módulos
- ✅ Documentación: Documentación completa con ejemplos
- Node.js: >= 18.0.0
- Navegadores: Modernos (ES2020+)
- TypeScript: >= 4.5.0
- Frameworks: React, Vue, Angular, Svelte, etc.
# Clonar repositorio
git clone https://github.com/eduair94/ci-validation.git
cd ci-validation
# Instalar dependencias
npm install
# Ejecutar tests
npm test
# Build
npm run buildMIT © Eduardo Airaudo
- GitHub: https://github.com/eduair94/ci-validation
- npm: https://www.npmjs.com/package/ci-validation
- Demo: https://ci-validation.vercel.app/
- Documentación: https://github.com/eduair94/ci-validation#readme
IMPORTANTE: A partir del 02/08/2025, todos los servicios gubernamentales de consulta de cédulas han sido inhabilitados:
- MEF: Activo - Formulario oficial del Ministerio de Economía y Finanzas
- MEF: Inhabilitado desde 02/08/2025 (Error: "Lo sentimos, ocurrió un error al ejecutarse la operación")
Esta librería ahora solo puede realizar:
- ✅ Validación algorítmica local (verificación de dígito verificador)
- ❌ Consultas de información personal (no disponibles)
El uso debe ser únicamente para validación de formato y algoritmo. No es posible obtener información personal de los ciudadanos a través de esta librería desde las fechas mencionadas.
¿Encontraste útil esta librería? ⭐ Dale una estrella en GitHub!