Notas · 7 de agosto de 2026
Si trabajas con datos chilenos vas a tener que validar RUTs. La gente los tipea con puntos, sin puntos, con guión, sin guión, con la K en mayúscula o minúscula. Y siempre, siempre, alguien va a meter un RUT inválido en el formulario.
Acá está el algoritmo oficial del dígito verificador, sin dependencias, en menos de 30 líneas. Te lo puedes implementar en el lenguaje que uses.
El algoritmo
El RUT chileno tiene un dígito verificador (DV) calculado así:
- Toma el cuerpo del RUT (los dígitos antes del DV).
- Multiplica cada dígito, de derecha a izquierda, por la serie
2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7…(cíclica). - Suma todos esos productos.
- Calcula
11 - (suma mod 11). - Si el resultado es
11, el DV es0. Si es10, el DV es la letraK. En cualquier otro caso, el DV es ese mismo número.
El pseudocódigo
funcion validar_rut(rut):
rut = mayusculas(rut)
rut = quitar(rut, ".", "-", " ")
si largo(rut) < 2:
devolver falso
cuerpo = rut[0 .. largo(rut)-2]
dv = rut[ultimo]
n = entero(cuerpo)
si error o n < 1:
devolver falso
multiplicador = 2
suma = 0
mientras n > 0:
suma = suma + (n mod 10) * multiplicador
n = n div 10
multiplicador = multiplicador + 1
si multiplicador > 7:
multiplicador = 2
resto = suma mod 11
si resto == 0:
esperado = "0"
si no, si resto == 1:
esperado = "K"
si no:
esperado = texto(11 - resto)
devolver dv == esperado
Eso es todo. Sin librerías de validación, sin dependencias externas.
Casos de prueba
| RUT de entrada | Válido |
|---|---|
11.111.111-1 | sí |
11111111-1 | sí |
22.222.222-2 | sí |
15.873.097-K | sí |
15873097K | sí |
15873097-k | sí (sin distinguir mayúsculas) |
12345678-9 | no (DV incorrecto) |
abc | no |
| `` (vacío) | no |
Cómo lo usamos en formularios
Cuando validas RUTs en un formulario que se renderiza en el servidor, el flujo queda así:
al recibir POST /clientes:
rut = campo_del_formulario("rut")
si no validar_rut(rut):
responder 422 con "<span class='error'>RUT inválido</span>"
terminar
...continuar con el guardado
Sin librerías de validación, sin schemas. El servidor valida, devuelve HTML y el navegador lo inserta donde corresponda.
Una nota sobre formato
Hay dos cuestiones distintas que la gente confunde:
- Validar el DV: lo que hace este algoritmo. Comprueba que el RUT esté matemáticamente bien formado.
- Verificar que el RUT exista: requiere consultar al SII (Servicio de Impuestos Internos), un servicio externo. Es otra capa.
Para el 99% de los formularios de PYMES, validar el DV es suficiente. Si necesitas verificar contra el SII (por ejemplo para emisión de documentos tributarios), eso es un proyecto distinto.
Esto es típico en proyectos donde convertimos planillas Excel en aplicaciones reales: el primer paso siempre es validar bien los datos locales antes de migrarlos.
¿Tienes un sistema chileno que necesita validar datos locales y quieres dejar de pelear con strings? Cuéntanos por WhatsApp o correo.