Python Snippet

Validación de RUT en Python con Módulo 11

Implementación nativa en Python 3 para validar y formatear RUTs chilenos en aplicaciones Django, Flask o scripts de análisis de datos con Pandas.

rut_validator.py
import re
from itertools import cycle

def validate_rut(rut: str) -> bool:
    """
    Valida si un RUT chileno es matemáticamente correcto mediante Módulo 11.
    """
    if not rut or not isinstance(rut, str):
        return False

    # Limpiar puntos, guiones y espacios
    clean_rut = re.sub(r'[^0-9kK]', '', rut).upper()
    if len(clean_rut) < 2:
        return False

    body, dv = clean_rut[:-1], clean_rut[-1]

    if not body.isdigit():
        return False

    # Factores multiplicadores cíclicos: 2, 3, 4, 5, 6, 7
    factors = cycle([2, 3, 4, 5, 6, 7])
    total_sum = sum(int(digit) * factor for digit, factor in zip(reversed(body), factors))

    remainder = total_sum % 11
    expected_dv_num = 11 - remainder

    if expected_dv_num == 11:
        expected_dv = '0'
    elif expected_dv_num == 10:
        expected_dv = 'K'
    else:
        expected_dv = str(expected_dv_num)

    return dv == expected_dv

# Tests de ejemplo:
if __name__ == "__main__":
    assert validate_rut("10.000.013-K") is True
    assert validate_rut("12345678-5") is True
    assert validate_rut("10.000.013-0") is False
    print("¡Todos los tests pasaron exitosamente!")
Publicidad
Espacio Publicitario AdSense (728x90)