Necesito ayuda para validar el Rut en ACCESS
Tengo un campo llamado [Rut] en un formulario llamado Pacientes, le puse la mascara de entrada 00.000.000\-A;0;_ con lo que el dato se ve así ej: 13.112.077-K . Bueno mi problema es que necesito que una vez que ingrese el dato, me avise con un mensaje si el dígito o letra después del guion es correcto.
Hice un modulo que tiene dos funciones, para validar el rut, según el autor:
"La más importante es la primera (Public Function RutDigito(ByVal Rut As Long) As String) pues es ésta la que calcula el dígito verificador correcto para un determinado RUT, mientras que la segunda (Public Function EsRut(Expression As Variant) As String) se cuelga de la primera para validar una cadena que contenga el RUT."
Public Function RutDigito(ByVal Rut As Long) As String
Dim Digito As Integer
Dim Contador As Integer
Dim Multiplo As Integer
Dim Acumulador As Integer
Contador = 2
Acumulador = 0
While Rut <> 0
Multiplo = (Rut Mod 10) * Contador
Acumulador = Acumulador + Multiplo
Rut = Rut \ 10
Contador = Contador + 1
If Contador = 8 Then
Contador = 2
End If
Wend
Digito = 11 - (Acumulador Mod 11)
RutDigito = CStr(Digito)
If Digito = 10 Then RutDigito = "K"
If Digito = 11 Then RutDigito = "0"
End Function
Public Function EsRut(Expression As Variant) As String
' Para que pase la validación, Expression debe tener como mínimo
' 3 caracteres, siendo uno de ellos el guión. Además, la parte
' que se ubica a la izquierda del guión debe ser numérica, mientras
' que la parte que está a la derecha, consistente en un solo carácter,
' permite un dígito (0... 9) o la letra "K". Cabe destacar que este
' último carácter debe representar un dígito verificador válido para
' la parte izquierda.
Const cstrErrorString = "NO ES RUT"
' Mínimo 3 caracteres
If Len(Expression) < 3 Then
EsRut = cstrErrorString
Exit Function
End If
' El guión debe estar presente
Dim Pos As Integer
Pos = InStr(1, Expression, "-")
If Pos = 0 Then
EsRut = cstrErrorString
Exit Function
End If
' La parte izquierda debe ser numérica
Dim Numero As String
Numero = Left(Expression, Pos - 1)
Numero = Replace(Replace(Numero, ".", ""), ",", "")
If Not IsNumeric(Numero) Then
EsRut = cstrErrorString
Exit Function
End If
' La conversión a entero de la parte izquierda no puede exceder el
' valor 99 999 999
Dim LngNumero As Long
LngNumero = CLng(Replace(Replace(Numero, ".", ""), ",", ""))
If LngNumero > 99999999 Then
EsRut = cstrErrorString
Exit Function
End If
' La parte derecha debe ser de longitud 1
Dim Digito As String
Digito = Right(Expression, Len(Expression) - Pos)
If Len(Digito) > 1 Then
EsRut = cstrErrorString
Exit Function
End If
' La parte derecha admite solo los caracteres ("0"..."9", "k", "K")
If InStr(1, "0123456789kK", Digito) = 0 Then
EsRut = cstrErrorString
Exit Function
End If
' La parte derecha debe representar un dígito verificador válido
' para la parte izquierda
If RutDigito(LngNumero) <> UCase(Digito) Then
EsRut = cstrErrorString
Exit Function
End If
' Ha pasado todas las pruebas
EsRut = Replace(Format(CStr(LngNumero), "00,000,##0"), ",", ".") & "-" & UCase(Digito)
End Function
Bueno, puse esto en el modulo y ahora necesito hacerla funcionar para el campo. Osea como cargo la o las funciones para validar el Rut después de ingresar el dato y pasar al siguiente campo. Tengo ACCESS 2007.
Hice un modulo que tiene dos funciones, para validar el rut, según el autor:
"La más importante es la primera (Public Function RutDigito(ByVal Rut As Long) As String) pues es ésta la que calcula el dígito verificador correcto para un determinado RUT, mientras que la segunda (Public Function EsRut(Expression As Variant) As String) se cuelga de la primera para validar una cadena que contenga el RUT."
Public Function RutDigito(ByVal Rut As Long) As String
Dim Digito As Integer
Dim Contador As Integer
Dim Multiplo As Integer
Dim Acumulador As Integer
Contador = 2
Acumulador = 0
While Rut <> 0
Multiplo = (Rut Mod 10) * Contador
Acumulador = Acumulador + Multiplo
Rut = Rut \ 10
Contador = Contador + 1
If Contador = 8 Then
Contador = 2
End If
Wend
Digito = 11 - (Acumulador Mod 11)
RutDigito = CStr(Digito)
If Digito = 10 Then RutDigito = "K"
If Digito = 11 Then RutDigito = "0"
End Function
Public Function EsRut(Expression As Variant) As String
' Para que pase la validación, Expression debe tener como mínimo
' 3 caracteres, siendo uno de ellos el guión. Además, la parte
' que se ubica a la izquierda del guión debe ser numérica, mientras
' que la parte que está a la derecha, consistente en un solo carácter,
' permite un dígito (0... 9) o la letra "K". Cabe destacar que este
' último carácter debe representar un dígito verificador válido para
' la parte izquierda.
Const cstrErrorString = "NO ES RUT"
' Mínimo 3 caracteres
If Len(Expression) < 3 Then
EsRut = cstrErrorString
Exit Function
End If
' El guión debe estar presente
Dim Pos As Integer
Pos = InStr(1, Expression, "-")
If Pos = 0 Then
EsRut = cstrErrorString
Exit Function
End If
' La parte izquierda debe ser numérica
Dim Numero As String
Numero = Left(Expression, Pos - 1)
Numero = Replace(Replace(Numero, ".", ""), ",", "")
If Not IsNumeric(Numero) Then
EsRut = cstrErrorString
Exit Function
End If
' La conversión a entero de la parte izquierda no puede exceder el
' valor 99 999 999
Dim LngNumero As Long
LngNumero = CLng(Replace(Replace(Numero, ".", ""), ",", ""))
If LngNumero > 99999999 Then
EsRut = cstrErrorString
Exit Function
End If
' La parte derecha debe ser de longitud 1
Dim Digito As String
Digito = Right(Expression, Len(Expression) - Pos)
If Len(Digito) > 1 Then
EsRut = cstrErrorString
Exit Function
End If
' La parte derecha admite solo los caracteres ("0"..."9", "k", "K")
If InStr(1, "0123456789kK", Digito) = 0 Then
EsRut = cstrErrorString
Exit Function
End If
' La parte derecha debe representar un dígito verificador válido
' para la parte izquierda
If RutDigito(LngNumero) <> UCase(Digito) Then
EsRut = cstrErrorString
Exit Function
End If
' Ha pasado todas las pruebas
EsRut = Replace(Format(CStr(LngNumero), "00,000,##0"), ",", ".") & "-" & UCase(Digito)
End Function
Bueno, puse esto en el modulo y ahora necesito hacerla funcionar para el campo. Osea como cargo la o las funciones para validar el Rut después de ingresar el dato y pasar al siguiente campo. Tengo ACCESS 2007.
2 Respuestas
Respuesta de azarleonardo
1
Respuesta de Valentín Venegas
Buenas tardes, Puedes colgar la respuesta o la bd, muchas gracias - Valentín Venegas
Comentario borrado por el autor - azarleonardo
Hola Valentín. Pasame tu correo y te envío un ejemplo.Atte. - azarleonardo
[email protected], gracias - Valentín Venegas
Hola a todos, lo puedes compartir conmigo? te dejo mi correo: [email protected] antemano muchas gracias!Saludos - Rodrigo Ramos Pinilla