rut.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. def validate_rut(rut):
  2. """
  3. Validates a Chilean RUT (Rol Único Tributario).
  4. Args:
  5. rut (str): The RUT to validate, formatted as '12345678-9'.
  6. Returns:
  7. bool: True if the RUT is valid, False otherwise.
  8. """
  9. if not rut or '-' not in rut:
  10. return False
  11. try:
  12. body, dv = rut.split('-')
  13. body = int(body)
  14. dv = dv.upper()
  15. except ValueError:
  16. return False
  17. if len(str(body)) < 7 or len(str(body)) > 8:
  18. return False
  19. # Calculate the expected DV
  20. total = 0
  21. factor = 2
  22. for digit in reversed(str(body)):
  23. total += int(digit) * factor
  24. factor = factor + 1 if factor < 7 else 2
  25. expected_dv = str((11 - (total % 11)) % 11)
  26. if expected_dv == '10':
  27. expected_dv = 'K'
  28. return dv == expected_dv
  29. if __name__ == "__main__":
  30. # Example usage
  31. print(validate_rut("1234567-10")) # Should return False, invalid
  32. print(validate_rut("21382334-5")) # Should return True, validity
  33. print(validate_rut("21975985-1")) # Should return True, validity