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)