Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

¿Como validar Rut?

Estas en el tema de ¿Como validar Rut? en el foro de Visual Basic clásico en Foros del Web. Hola, me gustaria saber cómo hacer para verificar si el Rut ingresado en un textbox es real. Quiero validarlo. Trabajo con SQL Server 2005 y ...
  #1 (permalink)  
Antiguo 15/12/2008, 18:32
 
Fecha de Ingreso: diciembre-2008
Mensajes: 38
Antigüedad: 15 años, 4 meses
Puntos: 2
Pregunta ¿Como validar Rut?

Hola, me gustaria saber cómo hacer para verificar si el Rut ingresado en un textbox es real. Quiero validarlo.
Trabajo con SQL Server 2005 y el atributo Rut es "varchar (10)" (creo que es necesario que sepan eso tambien).Solo 10 caracteres ya que es la cantidad de caracteres que posee un rut.

Ojala puedan ayudarme como siempre lo hacen.
Saludos
  #2 (permalink)  
Antiguo 16/12/2008, 10:56
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 2 meses
Puntos: 37
Respuesta: ¿Como validar Rut?

Cita:
Iniciado por Strok3R Ver Mensaje
Hola, me gustaria saber cómo hacer para verificar si el Rut ingresado en un textbox es real. Quiero validarlo.
Trabajo con SQL Server 2005 y el atributo Rut es "varchar (10)" (creo que es necesario que sepan eso tambien).Solo 10 caracteres ya que es la cantidad de caracteres que posee un rut.

Ojala puedan ayudarme como siempre lo hacen.
Saludos
Hola, según tengo entendido el Rut chileno se compone de 8 dígitos mas un guión (-) mas un caracter verificador de los 8 dígitos.

El verificador se obtiene sumando la multiplicación de la siguiente secuencia de números 3 2 7 6 5 4 3 2 por cada uno de los dígitos de izquierda a derecha y el resultado se divide entre 11 y el resto de esta división se le sustrae a 11 y ese es el verificador. Si este es 10 se convierte en "K" y si es 11 en "0".

Partiendo de esta premisa podemos crear una función como ésta (al digitar el octavo número en un TextBox lo transforma en el Rut completo)

Código:
Public Function ValidaRut(ByVal ElNumero As String) As String
        Dim Resultado As String = ""
        Dim Multiplicador As Integer = 2
        Dim iNum As Integer = 0
        Dim Suma As Integer = 0

        For i As Integer = 8 To 1 Step -1
            iNum = Mid(ElNumero, i, 1)
            Suma += iNum * Multiplicador
            Multiplicador += 1
            If Multiplicador = 8 Then Multiplicador = 2
        Next
        Resultado = CStr(11 - (Suma Mod 11))
        If Resultado = "10" Then Resultado = "K"
        If Resultado = "11" Then Resultado = "0"
        Return ElNumero & "-" & Resultado
    End Function
Llamamos a la función así

Código:
Private Sub TxtRut_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TxtRut.TextChanged
        If TxtRut.TextLength = 8 Then TxtRut.Text = ValidaRut(TxtRut.Text)
    End Sub
Para validar que lo introducido en el TextBox sólo sean números:
Código:
Private Sub TxtRut_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtRut.KeyPress
        e.Handled = ValidaChar(e.KeyChar)
    End Sub

    Public Function ValidaChar(ByVal car As Char) As Boolean
        ' sólo admitimos números y tecla retroceso
        If Char.IsNumber(car, 0) = True Or Char.IsControl(car) = True Then
            Return (False)
        Else
            Return (True)
        End If
    End Function
y para que no se puedan introducir mas de 10 caracteres en el TextBox, le pones la propiedad MaxLength = 10

  #3 (permalink)  
Antiguo 16/12/2008, 18:49
 
Fecha de Ingreso: diciembre-2008
Mensajes: 38
Antigüedad: 15 años, 4 meses
Puntos: 2
De acuerdo Respuesta: ¿Como validar Rut?

Gtaciasa man, que bueno que hallan personas dispuestas a ayudar.
Todo esto funciona

Gracias
  #4 (permalink)  
Antiguo 22/12/2008, 16:08
 
Fecha de Ingreso: diciembre-2008
Mensajes: 2
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: ¿Como validar Rut?

esta impekable el codigo pero se cae al borrar el rut con la tecla suprimir en el tercer campo del rut se cae el software este es el error si me pueden ayudar a corregirlo

--Conversion from string "-" to type 'Integer' is not valid.

en esta linea del codigo

iNum = Mid(ElNumero, i, 1)

de todas maneras gracias.
  #5 (permalink)  
Antiguo 23/12/2008, 03:22
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 2 meses
Puntos: 37
Respuesta: ¿Como validar Rut?

Cita:
Iniciado por ivan185 Ver Mensaje
esta impekable el codigo pero se cae al borrar el rut con la tecla suprimir en el tercer campo del rut se cae el software este es el error si me pueden ayudar a corregirlo

--Conversion from string "-" to type 'Integer' is not valid.

en esta linea del codigo

iNum = Mid(ElNumero, i, 1)

de todas maneras gracias.
Bueno, hay varias formas de evitar el error:
- Controlando la excepción en un bloque Try..Catch.. End Try
- Al detectar la pulsación de la tecla Supr eliminar los dos caracteres añadidos (guión y dígito verificador).
- ...

Pero teniendo en cuenta que la verificación del dígito es correcta, a mi me parece mas práctico que una vez calculado el dígito verificador, pasar el foco al siguiente control y para evitar que el usuario (cabezota él) se vuelva a posicionar en el TextBox y le dé a la tecla Supr, al tomar el foco limpiamos el TextBox.

Para ello modificamos este evento:
Código:
Private Sub TxtRut_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TxtRut.TextChanged
        If TxtRut.TextLength = 8 Then
            TxtRut.Text = ValidaRut(TxtRut.Text)
            My.Computer.Keyboard.SendKeys("{tab}", True)
        End If
    End Sub
Y al tomar el foco el control:
Código:
Private Sub TxtRut_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TxtRut.GotFocus
        TxtRut.Clear()
    End Sub
  #6 (permalink)  
Antiguo 23/12/2008, 09:51
 
Fecha de Ingreso: diciembre-2008
Mensajes: 2
Antigüedad: 15 años, 4 meses
Puntos: 0
Sonrisa Respuesta: ¿Como validar Rut?

ta bueno el arreglo pero hay otra observacion pero siempre constructiva...
que pasa si un digitador solicita el rut a una persona y este le dicta mal su rut. eje:
13952269..
y dicta
13952369..
el valida rut genera automaticamente el dv. pero siempre es algo valido, pero no necesariamente es el real de la persona. la idea es q se compare con el digito dictado por la persona.
si me explique bien?...
  #7 (permalink)  
Antiguo 23/12/2008, 10:45
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 2 meses
Puntos: 37
Respuesta: ¿Como validar Rut?

Cita:
Iniciado por ivan185 Ver Mensaje
ta bueno el arreglo pero hay otra observacion pero siempre constructiva...
que pasa si un digitador solicita el rut a una persona y este le dicta mal su rut. eje:
13952269..
y dicta
13952369..
el valida rut genera automaticamente el dv. pero siempre es algo valido, pero no necesariamente es el real de la persona. la idea es q se compare con el digito dictado por la persona.
si me explique bien?...
Bueno, el ejercicío anterior era para generar automáticamente el dígito de validación, pero si lo que queremos es comprobar si el Rut introducido es correcto, modificamos un poco la función:

Código:
Public Function ComprobarRut(ByVal ElNumero As String) As Boolean
        Dim Resultado As String = ""
        Dim Multiplicador As Integer = 2
        Dim iNum As Integer = 0
        Dim Suma As Integer = 0

        For i As Integer = 8 To 1 Step -1
            iNum = Mid(ElNumero, i, 1)
            Suma += iNum * Multiplicador
            Multiplicador += 1
            If Multiplicador = 8 Then Multiplicador = 2
        Next
        Resultado = CStr(11 - (Suma Mod 11))
        If Resultado = "10" Then Resultado = "K"
        If Resultado = "11" Then Resultado = "0"
        If ElNumero.EndsWith(Resultado) Then
            Return True
        Else
            Return False
        End If
    End Function
Eliminamos el evento TxtRut_TextChanged y ponemos el siguiente, en un Button o en el evento de validación del TextBox
(aquí ya el Text tiene el formato "nnnnnnnn-d")

Código:
If ComprobarRut(TxtRut.Text) = False Then
            MsgBox("El Rut no es correcto")
            TxtRut.Focus()
        Else
            My.Computer.Keyboard.SendKeys("{tab}", True)
        End If

  #8 (permalink)  
Antiguo 12/02/2009, 21:19
Avatar de gepd  
Fecha de Ingreso: diciembre-2007
Mensajes: 142
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: ¿Como validar Rut?

Disculpen si es muy tarde para responder éste tema, pero tengo una duda

Probando el último código de Avellaneda me salta un error
donde me indica ésta linea

If ElNumero.EndsWith(Resultado) Then

por lo que e buscado EndsWith() es una funcion para .NET cual sería la función correspondiente a VB 6?
  #9 (permalink)  
Antiguo 13/02/2009, 03:33
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 2 meses
Puntos: 37
Respuesta: ¿Como validar Rut?

Cita:
Iniciado por gepd Ver Mensaje
Disculpen si es muy tarde para responder éste tema, pero tengo una duda

Probando el último código de Avellaneda me salta un error
donde me indica ésta linea

If ElNumero.EndsWith(Resultado) Then

por lo que e buscado EndsWith() es una funcion para .NET cual sería la función correspondiente a VB 6?
Hola, la función equivalente en VB6 es Right:

ElNumero = Right(Resultado, 1)

  #10 (permalink)  
Antiguo 14/02/2009, 01:02
Avatar de gepd  
Fecha de Ingreso: diciembre-2007
Mensajes: 142
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: ¿Como validar Rut?

Gracias Efectivamente funcionó con unas modificaciones de por medio mañana subiré el codigo modificado para VB6

saludos
  #11 (permalink)  
Antiguo 21/02/2009, 13:26
Avatar de gepd  
Fecha de Ingreso: diciembre-2007
Mensajes: 142
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: ¿Como validar Rut?

Aquí está la modificación que le hice, funciona perfectamente en VB6 sin SP6

Código:
Public Function ComprobarRut(ByVal ElNumero As String) As Boolean
	Dim resultado As String
	Dim Multiplicador As Integer
	Dim iNum As Integer
	Dim Suma As Integer
	Dim I As Integer
	Dim Final() As String
	Dim cad(15) As String
	
	resultado = 0
	Multiplicador = 2
	iNum = 0
	Suma = 0

	For I = (Len(ElNumero)) - 2 To 1 Step -1
    		iNum = Mid(ElNumero, I, 1)
    		Suma = Suma + iNum * Multiplicador
    		Multiplicador = Multiplicador + 1
    		If Multiplicador = 8 Then Multiplicador = 2
	Next

	resultado = CStr(11 - (Suma Mod 11))

	If resultado = "10" Then resultado = "K"
    	If resultado = "11" Then resultado = "0"
        	Final = Split(ElNumero, "-")
        If Final(1) = Right(resultado, 1) Then
            ComprobarRut = True
        Else
            ComprobarRut = False
        End If
End Function
El formato de entrada debe ser de tipo 00000000-0
si quieren ingresarlo con un formato de tipo 00.000.000-0


pueden agregar ésta linea antes del for

Código:
ElNumero = Replace(ElNumero, ".", "")
Saludos
  #12 (permalink)  
Antiguo 08/03/2012, 09:26
 
Fecha de Ingreso: septiembre-2011
Mensajes: 2
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ¿Como validar Rut?

HOLA A TODOS... YA HAN PASADO UNOS AÑOS PERO ESPERO QUE ALGUIEN ME RESPONDA Y ME PUEDA AYUDAR.. RESULTA QUE EL CODIGO ME FUNCIONA PERFECTO, PERO SIEMPRE Y CUANDO EL RUT TENGA LOS 8 NUMEROS FIJOS POR EJEMPLO: 16830785 -> 8 DIGITOS , 16830785-3

EN CAMBIO CUANDO TIENE MENOS COMO 5646537-5 EL PROGRAMA SE ME CAE Y ME TIRA UN ERROR EN ESTA PARTE DEL CODIGO:

For i As Integer = 8 To 1 Step -1
iNum = Mid(ElNumero, i, 1) --> ACA SE CAE

NO SE CONTROLO InvalidCastExeption
La conversion de la cadena "-" en el tipo Integer no es valida.
y si le pongo el rut sin el "-" me dice rut incorrecto.

Suma += iNum * Multiplicador
Multiplicador += 1
If Multiplicador = 8 Then Multiplicador = 2


ALGUIEN ME PUEDE AYUDAR PORFAVORR.. SE LOS AGREDECERIA MUCHO.. ESTOY ATENTO A CUALQUIER TIPO DE RESPUESTA. SALUDOS
  #13 (permalink)  
Antiguo 09/03/2012, 03:02
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Respuesta: ¿Como validar Rut?

Hola

No he mirado todo el post, pero deduzco que si el número no tiene 8 dígitos y empiezas el for por el 8 y luego tratas de partirlo es lógico que casque. Si el número tiene 5 dígitos empieza el for por 5 en lugar de 8.

Si no sabes que longitud tiene, siempre puedes medirlo con la función Len()

--Saludos--
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:25.