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í:

  1. Toma el cuerpo del RUT (los dígitos antes del DV).
  2. 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).
  3. Suma todos esos productos.
  4. Calcula 11 - (suma mod 11).
  5. Si el resultado es 11, el DV es 0. Si es 10, el DV es la letra K. 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 entradaVálido
11.111.111-1
11111111-1
22.222.222-2
15.873.097-K
15873097K
15873097-ksí (sin distinguir mayúsculas)
12345678-9no (DV incorrecto)
abcno
`` (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:

  1. Validar el DV: lo que hace este algoritmo. Comprueba que el RUT esté matemáticamente bien formado.
  2. 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.

← Volver a notas