Function ValidarRUT(RUT As String) As Boolean
Dim rut_sin_dv As String
Dim dv_ingresado As String
Dim dv_calculado As Integer
'Eliminar puntos y guiones del RUT ingresado
rut_sin_dv = Replace(Replace(RUT, ".", ""), "-", "")
'Verificar que el RUT tenga el formato correcto
If Not (Len(rut_sin_dv) = 8 Or Len(rut_sin_dv) = 9) Then
ValidarRUT = False
Exit Function
End If
'Obtener el dígito verificador ingresado
dv_ingresado = Right(rut_sin_dv, 1)
'Verificar que el dígito verificador sea un número o una K
If Not IsNumeric(dv_ingresado) And dv_ingresado <> "K" Then
ValidarRUT = False
Exit Function
End If
'Calcular el dígito verificador
Dim factor As Integer
Dim suma As Integer
Dim resto As Integer
factor = 2
suma = 0
For i = Len(rut_sin_dv) - 1 To 0 Step -1
suma = suma + (Mid(rut_sin_dv, i + 1, 1) * factor)
factor = factor + 1
If factor = 8 Then factor = 2
Next i
resto = suma Mod 11
dv_calculado = 11 - resto
If dv_calculado = 11 Then dv_calculado = 0
If dv_calculado = 10 Then dv_calculado = "K"
'Verificar que el dígito verificador ingresado sea igual al calculado
If UCase(dv_ingresado) <> UCase(dv_calculado) Then
ValidarRUT = False
Exit Function
End If
'Si se llega hasta aquí, el RUT ingresado es válido
ValidarRUT = True
End Function