Validar un RUT chileno en JavaScript requiere implementar el algoritmo Módulo 11 y el formateo con puntos y guión. Aquí tienes el código completo listo para usar en cualquier formulario web.
Función de validación completa
function validarRut(rut) {
// Limpiar y normalizar
const clean = rut.replace(/[^0-9kK]/g, '').toUpperCase();
if (clean.length < 2) return false;
const body = clean.slice(0, -1);
const dv = clean.slice(-1);
// Calcular dígito verificador
const serie = [2,3,4,5,6,7];
const suma = body.split('').reverse()
.reduce((acc, d, i) => acc + parseInt(d) * serie[i % 6], 0);
const resto = 11 - (suma % 11);
let dvEsperado;
if (resto === 11) dvEsperado = '0';
else if (resto === 10) dvEsperado = 'K';
else dvEsperado = String(resto);
return dv === dvEsperado;
}
// Formatear RUT con puntos y guión
function formatearRut(rut) {
const clean = rut.replace(/[^0-9kK]/g, '').toUpperCase();
const body = clean.slice(0, -1);
const dv = clean.slice(-1);
return body.replace(/\B(?=(\d{3})+(?!\d))/g, '.') + '-' + dv;
}
// Ejemplos
validarRut('12345678-5'); // true
validarRut('12345678-9'); // false
formatearRut('123456785'); // "12.345.678-5"
Validación en tiempo real en un formulario
document.getElementById('rut').addEventListener('input', function(e) {
const input = e.target;
const valor = input.value;
// Formatear mientras escribe
if (valor.replace(/[^0-9kK]/g, '').length > 1) {
input.value = formatearRut(valor);
}
// Mostrar feedback visual
const esValido = validarRut(valor);
input.classList.toggle('border-green-500', esValido);
input.classList.toggle('border-red-500', !esValido && valor.length > 3);
});
Preguntas frecuentes
¿Esta función maneja el caso del RUT con K?
Sí. La función acepta tanto K mayúscula como k minúscula y las normaliza a mayúscula para la comparación.
¿Funciona con RUTs de 7 y 8 dígitos?
Sí. La función funciona para cualquier largo de cuerpo, desde los RUT más bajos (1 dígito) hasta los más altos (8 dígitos).