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.

2 Respuestas

Respuesta

Estimada, compartir no tiene limites, ojala que te sirva

https://www.dropbox.com/s/5c4fiv5p8pjrjrm/Ejemplo%20Validar%20Rut%20%281%29.mdb?dl=0 

Respuesta
1
La estructura del código está bastante entendible pero lo que no tengo idea es para que sirve. Podrías antes que nada explicarme algunas cosas como:
¿De qué trata tu base de datos?, ¿Qué son el rut y dígito verificador y cómo se usan?, ¿Cómo se componen la base de datos y el formulario en cuestión?
Para tratar de descifrar como funciona el código y ayudarte a ponerlo en marcha, ya que nunca trabajé con Rut y no se que es...
Bueno, gracias por responder. El rut es un documento de identidad en CHILE, similar al DNI. El RUT se compone de 8 dígitos seguidos por un guion y un identificador que puede ser cualquier numero entre 0 y 9 o también la letra QUE exclusivamente.
Las funciones que puse son para validar el rut, pero no puedo aplicarlas en el formulario. Necesito validarlo porque es un único documento que no tiene duplicado, lo estoy usando de clave.
Mi BDD se compone de varias tablas, la primera (donde tengo el problema) guarda la información personal de cada paciente, las tablas siguientes son para identificar al personal, agendar el procedimiento (u operación) y están relacionadas. Cada tabla tiene un formulario, el primer formulario que abro me sirve para ingresar los datos del pacientes y allí necesito validar el RUT, el segundo formulario hace referencia a la tabla de procedimientos y cuando pongo el rut (previamente ingresado en la otra tabla) me carga la información personal que alguien ya había ingresado. Como te digo en el formulario de la tabla de pacientes tengo un campo de texto con el formato 11.111.111-K.
Gracias. Saludos
Estuve viendo el código que me dejaste, pero no pude hacerlo funcionar correctamente. Estoy trabajando en otro que me parece que va a funcionar bien, pero necesitaría que si podes me envíes la base de datos al correo, especificando el nombre del formulario en el que querés que se realice la validación, para terminar de adaptar el código. Mi correo es [email protected]. Una vez terminada la adaptación y verificado el correcto funcionamiento, te la volvería a enviar.
Ok, te la envíe, ojala tenga solución.
Saludos!
Pequeño inconveniente... El ACCDB no puedo abrirlo porque es exclusivo de Access 2007. Voy a necesitar que me envíes la BD en modo compatible con access 2000, 2002 o 2003(MDB) ya que son los sistemas que yo utilizo. No te olvides de especificar en el próximo mail el nombre del formulario donde querés validar el Rut.
Te envíe la BDD convertida, pero tuve que eliminar algunas tablas que tenían características especiales de ACCESS 2007, de todas formas, va el formulario con el campo de texto que necesito validar con su respectiva tabla.
Muchas gracias por tu ayuda e interés.
Saludos!
Listo!
Te mandé un email y adjunto va el ejemplo.
Me gusto tu idea, incluso es mejor de lo que yo buscaba. Pero no funciono con todos los RUT de ejemplo que iban en la tabla, solo funciono con el primer registro. Por favor revísala y trata de encontrar el error, mi rut es 13.112.077-k si pasa la prueba estaría ok.
Gracias por tus respuestas y tu buena disposición.
Saludos!
El algoritmo de verificación del rut lo bajé de internet y el terminado y adaptación del código lo hice yo. Fue el único que encontré dentro de todo bien escrito, entendible... Yo veo si encuentro otro algoritmo. Te repito que hasta el momento ni sabía lo que era el Rut. Si vos tenés el algoritmo o encontrás alguno pásamelo y veo si lo puedo adaptar...
Cualquier novedad te aviso por email, y vos lo mismo. Por favor finalizá la pregunta que se está haciendo muy extensa. Yo voy a seguir buscando, ya lo vamos a arreglar. ;)
Acá estoy de nuevo!
Ya encontré otro algoritmo (VB6). Lo probé con tu rut y me da el dígito verificador correcto (k). El problema es que de la forma que está escrito, es medio difícil de adaptar. Todavía no cierres la pregunta, esperame a ver si lo logro y te aviso...
Si alguna vez ando por Chile me vas a invitar un asadito, ¿no?
Todo arreglado. Encontré el algoritmo correcto en la web y desarollé el código de validación, lo implementé en el ejemplo y todo funciona correctamente. Lo probé con tu Rut y con todos los de la tabla y todo anduvo a la perfección. Lindo desafío me dejaste! ;)
Ya te lo estoy enviado al correo.
Wow! Te quedo muy pero muy bueno! No esperaba una validación tan completa. La solución que diste es sin duda la mejor.
Bueno, cuando vengas a Chile me escribes un correo para afinar lo referente al asado =D
Te agradezco la preocupación. Voy a seguir preguntándote cosillas.
Un abrazo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas