none
Validar Letra DNI RRS feed

  • Pregunta

  • Hola

    como podria hacer una funcion para validar solo letra del DNI, que me diga el mensaje que NO deve ser numero solo letra

    que contenga la programcion  Try , Catch, End Try

    gracias


    Matiasg
    sábado, 19 de febrero de 2011 22:39

Respuestas

  • "Matiasg" preguntó:

    > como podria hacer una funcion para validar solo letra del DNI, que me diga
    > el mensaje que NO deve ser numero solo letra

    Si estamos hablando del dígito de control de un DNI de España, éste se encuentra formado por 8 dígitos acabado en una letra, por lo que te tienes que preocupar que el carácter de la 9 posición sea una letra de las permitidas, porque las letras I, Ñ, O y U no se permiten como dígitos de control de un NIF, que es como realmente se llama en España la combinación del DNI más el dígito de control.

    Para ello, entiendo que en éste supuesto no te va a ser útil el evento Validating, porque simplemente tienes que validar el noveno carácter de la cadena, conforme el usuario va introduciendo caracteres alfanuméricos en el control TextBox, por tanto, el evento idónedo sería el evento KeyPress, tal y como así te ha comentado el usuario Pedro 08.

        Private Sub TextBox1_KeyPress(ByVal sender As Object, _
                                      ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress

            ' Verificamos la longitud del control TextBox
            '
            Dim l As Int32 = TextBox1.TextLength

            If (l < 8) Then
                ' Solamente abandonamos el procedimiento
                Return

            ElseIf (l >= 9) Then
                ' Cancelamos el evento y abandonamos el procedimiento
                e.Handled = True
                Return

            End If

            ' Llegado a éste punto, se comprende que se está
            ' intentando introducir el Dígito de Control
            ' del NIF.
            '
            ' Verificamos si el carácter presionado se encuentra
            ' en el modelo de expresión regular definido.
            '
            Dim re As New Regex("[TRWAGMYFPDXBNJZSQVHLCKE]", RegexOptions.IgnoreCase)

            e.Handled = (Not (re.IsMatch(e.KeyChar)))

        End Sub

    Como podrás observar, se cancela el evento si el carácter tecleado no se corresponde con el patrón definido en la expresión regular.

    Insisto que no sé si estás hablando de la letra del NIF de un DNI español. Si es así, no estaría de más que le echaras un vistazo al enlace que te indico más abajo, porque los NIFs españoles tienen otras sutilezas que hay que tener en cuenta, ya que los Números de Identificación de Extranjero se validan de la misma manera que el resto de NIFs, pero pueden comenzar por las letras X, Y, y en algún momento también será la letra Z.

    Cómo obtener un Número de Identificación Fiscal (NIF) o de Extranjero (NIE)

     


    Enrique Martínez
      [MS MVP - VB]

    domingo, 20 de febrero de 2011 9:10
    Moderador

Todas las respuestas

  • Permite solo letras
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If Char.IsLetter(e.KeyChar) Then
          e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
          e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
          e.Handled = False
        Else
          e.Handled = True
        End If
    
      End Sub
    


    Estudiante de Sistemas Informáticos.
    • Propuesto como respuesta Binario domingo, 6 de marzo de 2011 2:30
    sábado, 19 de febrero de 2011 22:54

  • podrias usar el evento Validating

    Private Sub textBox1_Validating(ByVal sender As Object, _
                    ByVal e As System.ComponentModel.CancelEventArgs) Handles textBox1.Validating

       Dim r As New Regex("^[a-zA-Z]*$")
      If Not r.IsMatch(textBox1.Text) Then
         e.Cancel = True
         textBox1.Select(0, textBox1.Text.Length)

         Me.errorProvider1.SetError("Solo se aceptan letras", textBox1)
      End If
     
    End Sub

     

    en este caso si la expression refular no valida solo letras mostrara en el ErrorProvider el mensaje

    Nota: recuerda agregar el control error provider en el formulario

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Binario domingo, 6 de marzo de 2011 2:30
    sábado, 19 de febrero de 2011 23:36
  • "Matiasg" preguntó:

    > como podria hacer una funcion para validar solo letra del DNI, que me diga
    > el mensaje que NO deve ser numero solo letra

    Si estamos hablando del dígito de control de un DNI de España, éste se encuentra formado por 8 dígitos acabado en una letra, por lo que te tienes que preocupar que el carácter de la 9 posición sea una letra de las permitidas, porque las letras I, Ñ, O y U no se permiten como dígitos de control de un NIF, que es como realmente se llama en España la combinación del DNI más el dígito de control.

    Para ello, entiendo que en éste supuesto no te va a ser útil el evento Validating, porque simplemente tienes que validar el noveno carácter de la cadena, conforme el usuario va introduciendo caracteres alfanuméricos en el control TextBox, por tanto, el evento idónedo sería el evento KeyPress, tal y como así te ha comentado el usuario Pedro 08.

        Private Sub TextBox1_KeyPress(ByVal sender As Object, _
                                      ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress

            ' Verificamos la longitud del control TextBox
            '
            Dim l As Int32 = TextBox1.TextLength

            If (l < 8) Then
                ' Solamente abandonamos el procedimiento
                Return

            ElseIf (l >= 9) Then
                ' Cancelamos el evento y abandonamos el procedimiento
                e.Handled = True
                Return

            End If

            ' Llegado a éste punto, se comprende que se está
            ' intentando introducir el Dígito de Control
            ' del NIF.
            '
            ' Verificamos si el carácter presionado se encuentra
            ' en el modelo de expresión regular definido.
            '
            Dim re As New Regex("[TRWAGMYFPDXBNJZSQVHLCKE]", RegexOptions.IgnoreCase)

            e.Handled = (Not (re.IsMatch(e.KeyChar)))

        End Sub

    Como podrás observar, se cancela el evento si el carácter tecleado no se corresponde con el patrón definido en la expresión regular.

    Insisto que no sé si estás hablando de la letra del NIF de un DNI español. Si es así, no estaría de más que le echaras un vistazo al enlace que te indico más abajo, porque los NIFs españoles tienen otras sutilezas que hay que tener en cuenta, ya que los Números de Identificación de Extranjero se validan de la misma manera que el resto de NIFs, pero pueden comenzar por las letras X, Y, y en algún momento también será la letra Z.

    Cómo obtener un Número de Identificación Fiscal (NIF) o de Extranjero (NIE)

     


    Enrique Martínez
      [MS MVP - VB]

    domingo, 20 de febrero de 2011 9:10
    Moderador