Control Windows Forms para validar CUIT/CUIL

El control valida una cadena numérica “20172543597″
compuesta de 11 dígitos, por lo que previamente deberemos haber
controlado de no haber introducido un valor incorrecto.

Private Sub ValidarCUIT()

            ‘Recogemos el valor del TextBox que sólo contiene número

            Dim cadena as string = Me.TextBox.Text

‘Valores por los que multiplicaremos cada digito del CUIT

Dim loValores() As Integer = {5, 4, 3, 2, 7, 6, 5, 4, 3, 2}

‘Variable donde iremos sumando los valores que obtengamos de multiplicar

‘los digitos del cuit por los números de loValores

Dim loProducto As Integer = 0

For index As Integer = 0 To 9

loProducto += (Me.loValores.GetValue(index) * CInt(cadena.Text.Substring(index, 1)))

Next

‘Sacamos el mod 11 de loProducto

Dim intMod11 As Integer = loProducto Mod 11

‘Restamos el resultado de mod11 a 11

Dim digito As Integer = 11 – intMod11

‘Comprobamos que el valor coincida con el dígito de control introducido por el usuario en el TextBox

Dim dc As Integer = CInt(cadena.Text.Substring(10, 1))

If dc = digito Then

‘El resultado es correcto

Me.TextBox1.BackColor = Drawing.Color.PaleGreen

Else

‘El resultado es incorrecto

Me.TextBox1.BackColor = Drawing.Color.MistyRose

End If

End Sub

Control para validar Número Seguridad Social España en Visual Basic

Te muestro el código para validar el NASS (Número de afiliación a la
Seguridad Social) en Visual Basic .NET para Windows Form, si quieres
puedes descargarte el archivo con el control terminado que incluye
además otro para validar un DNI.

La cadena que se valida está conpuesta de doce caracteres, “aabbbbbbbbcc”, donde los dos primeros (“aa”) son el indicativo provincial, los ocho siguientes (“bbbbbbbb”) indican la cuenta de cotización de la persona, y los dos últimos (“cc”) son los dígitos de control.

Private Sub ValidarNass()

          dim strCodigo as String = Me.TextBox1.Text

‘Dos primeros dígitos de la cadena “aabbbbbbbbcc” en strCodigo
Dim a As Long = CInt(strCodigo.Text.Substring(0, 2))

‘Ultimos dos dígitos de la cadena “aabbbbbbbbcc” en strCodigo
Dim c As Long = CInt(strCodigo.Text.Substring(10, 2))
‘Digitos restantes por extraer de la cadena “aabbbbbbbbcc” en strCodigo
Dim b As Long = CInt(strCodigo.Text.Substring(2, 8))

Dim d As Long = Nothing
If b < 10000000 Then
d = b + a * 10000000
Else
d = CLng(strCodigo.Text.Substring(0, 2) & strCodigo.Text.Substring(2, 8))
End If
Dim dc As Long = d Mod 97
If dc = c Then
‘Es correcto
Me.TextBox1.BackColor = Drawing.Color.PaleGreen
Else
‘es incorrecto
Me.TextBox1.BackColor = Drawing.Color.MistyRose
End If

End Sub

 

Dos funcionalidades fundamentales para cualquier proyecto web, enviar mail y manipular el web.config

 

Cuando desarrollamos un sitio web suele ser conveniente o idóneo
guardar ciertos datos en el web.config, por ello es interesante
centralizar el acceso a los datos almacenados en dicho archivo en una
clase específica, que además podremos reutilizar en todos nuestros
proyectos web. Y qué decir de enviar mail, eso no tiene discusión
alguna, por lo que no me extenderé en este punto, sólo decirte que los
datos sobre conexión al servidor de correos los almacenaremos en el
web.config, así evitaremos colocar una cadena de texto en el código y
podremos cambiar la dirección de mail y sus parámetros desde un
formulario web.

Clase SettingsWeb

Desde esta clase podremos leer y
escribir los datos que almacenamos en el archivo web.config de nuestro
sitio web y cambiarlos. Una precisión importante es que el siguiente
código almacena los datos en texto plano, por lo que es muy
recomendable codificar los valores para mantenerlos a salvo de miradas
indiscretas y maliciosas

Previamente debemos añadir a nuestro archivo web.config las propiedades

</system.webServer>

<appSettings>

<!–ENCRIPTAR LOS VALORES SIEMPRE–>

<add key=”mail” value=”contoso@contoso.es”/>

<add key=”servidorSMTP” value=”mail.contoso.es”

<add key=”cuentaMail” value=”contoso@contoso.es”/>

<add key=”passMail” value=”contraseña”/>

</appSettings>

A continuación podemos crear la clase que manejara el appSetting

Imports System

Imports System.Configuration

Imports System.Web.Configuration

Imports Microsoft.VisualBasic

Public Class SettingsWeb

‘Devuelve los valores que necesitamos para enviar una mail

Public Function DameConfiguracionSMTP() as String()

‘Declaramos la variable que recoge los resultados

Dim returnValue() as String = {“”,””,””}

With returnValue

‘Recuperamos los valores del web.config por el valor del key

.SetValue(WebConfigurationManager.AppSettings(“servidorSMTP”),0)

.SetValue(WebConfigurationManager.AppSettings(“passMail”),1)

.SetValue(WebConfigurationManager.AppSettings(“cuentaMail”), 2)

End With

Return returnValue

End Function

‘Guardamos los datos para enviar correo electrónico en el web.config

Public Sub GuardarConfiguracionSMTP(ByVal smtp as String, _

            ByVal user as String, ByVal pass as String)

WebConfigurationManager.AppSettings(“servidorSMTP”) = smtp

WebConfigurationManager.AppSettings(“cuentaMail”) = user

WebConfigurationManager.AppSettings(“passMail”) = pass

End Function

End Class

Clase EnviarMail

Enviar correo electrónico desde nuestras aplicaciones web que tiene
gran misterio. El propio Framework 2.0 nos provee de una clase que
convierte la tarea en algo sumamente sencillo

Imports System.Net.Mail

Imports Microsoft.VisualBasic

Public Class EnviarMail

Public Function SendMail(ByVal remite As String, ByVal destinatario As String, _

                        ByVal asunto As String, ByVal mensaje As String) As Integer

‘Declaramos una instancia de la clase de acceso al web.config

Dim data As New settings

‘Recuperamos los datos necesarios para enviar un mail

Dim mySetting() As String = data.DameConfiguracionSMTP

‘Estraermos los valores de setting para clarificar el código

Dim servidor As String = mySetting.GetValue(0)

Dim user As String = mySetting.GetValue(1)

Dim pass As String = mySetting.GetValue(2)

‘Creamos un mensaje de correo electrónico

Dim correo As New MailMessage(remite, destinatario, asunto, mensaje)

‘Declaramos una variable que nos informe del resultado de la operacion

Dim status As Integer = Nothing

‘Controlamos los posibles errores que puedan surgir al enviar el correo

Try

‘Declaramos la clase que se encargara de gestionar el envio con el servidor

Dim carrier As New SmtpClient

carrier.UseDefaultCredentials = False

‘Le pasamos las credenciales

carrier.Credentials = New Net.NetworkCredential(user, pass)

‘Asignamos el puerto

carrier.Port = 25

‘Asignamos el servidor

carrier.Host = servidor

‘Escogemos el método de envio

carrier.DeliveryMethod = SmtpDeliveryMethod.Network

‘Enviamos el correo

carrier.Send(correo)

‘Si hemos llegado ha este punto suponemos el éxito

status = 1

Catch ex As Exception

MsgBox(“Error: ” & ex.Message)

‘Se ha producido un error y asignamos un valor para informar

status = 0

End Try

‘Devolvemos el resultado de la operación

Return status

End Function

End Class

Control Windows Form para validar DNI

 

Con el paso del tiempo todos los programadores creamos
nuestra propia utilería con la cual agilizamos el desarrollo de nuestras
soluciones. Es cierto que con las constantes evoluciones algunas se quedan
obsoletas, pero muchas otras mantienen su vigencia a pesar del discurrir del
tiempo. Una estrategia muy útil es la de crear controles que encapsulen toda la
lógica de validación de datos. En esta línea voy a exponer como crear algunos
controles TextBox para la introducción de DNI, NASS, EAN13 y ISBN en una librería
de controles para posteriormente incorporarlos a nuestro panel de controles en
Visual Studio. Si quieres profundizar en los algoritmos que existen para
validar estos códigos puedes visitar La tecla de
Escape
donde encontraras mucha información al respecto, y seguramente la
añadirás a tus favoritos. Al final puedes encontrar un descargable con el
proyecto que contiene el código. Si decides descargarlo y emplearlo
directamente te recomiendo que lo examines, aunque lo he probado, es una buena
costumbre revisar los códigos. Algunas veces los duendes hacen de las suyas y
una coma de comentario mal puesta da al traste con toda una función.

Control TextBox
para validar DNI

Este es un control de obligada presencia para la creación de
toda aplicación de gestión. En este caso vamos a controla la entrada de
caracteres. Tendremos en cuenta que los DNI para extranjeros comienza con X con
lo cual controlaremos dicha eventualidad

El código en cuestión lo que hace es crear un nuevo control
del tipo TextBox, del cual hereda toda su funcionalidad. Lo que hacemos es
personalizar todas las propiedades y eventos que nos interesa. El código es el
siguiente:

 Imports System.ComponentModel
<Drawing.ToolboxBitmap(“TextBoxDNI.bmp”)> _
Public Class TextBoxDNI
    Inherits System.Windows.Forms.TextBox

    ‘Variable para almacenar el DNI temporalmente
    Private loDNI As String
    ‘Variable que nos indica si es un NIE
    Private loNIE As Boolean = False

    Private loDNIOK As Boolean
    ‘Esta propiedad nos indica el estado en los procesos de validación de formulario
    Public ReadOnly Property DNIOK() As Boolean
        Get
            Return loDNIOK
        End Get
    End Property

    ”’ <summary>
    ”’ Sobrecargamos el método de getfocus para seleccionar todo el texto
    ”’ </summary>
    ”’ <param name=”e”></param>
    ”’ <remarks></remarks>
    Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)
        MyBase.OnGotFocus(e)
        If Me.TextLength <> 0 Then Me.SelectAll()
    End Sub

    ‘
    ”’ <summary>
    ”’ Personalizamos las acciones al perder el foco
    ”’ </summary>
    ”’ <param name=”e”></param>
    ”’ <remarks></remarks>
    Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
        MyBase.OnLeave(e)
        ‘evaluamos si tiene contenido
        If Me.TextLength <> 0 Then
            ‘EVALUAMOS EL DNI SI ES DISTINTO DEL QUE TENEMOS YA
            If Me.Text <> loDNI Then
                Me.Text.ToUpper()
                Me.EvaluarDNI()
            End If
        Else
            ‘Si está vacia cambiaremos el fondo a predeterminado, por si hubieramos borrado una entrada erronea
            Me.BackColor.ToString()
        End If
    End Sub

    ‘METODO DE VALIDACIÓN
    Private Sub EvaluarDNI()
        Dim numeros As String = “0123456789”
        Dim dc As String = Nothing
        If Me.TextLength >= 8 Then
            ‘Extraemos el último caracter
            dc = Me.Text.Chars(Me.TextLength – 1)
            ‘Comprobamos que el último caracter sea una letra
            If numeros.LastIndexOf(dc) <> -1 Then
                ‘El último caracter es un número
                Me.BackColor = Drawing.Color.MistyRose
                Me.loDNIOK = False
                MsgBox(“Falta la letra de control”)
                ‘Habilitando la dos líneas siguiente forzamos una introducción válida
                ‘Me.Focus()
                ‘Me.SelectAll()
            Else
                ‘Comprobamos si es NIE
                If Me.Text.Chars(0) = “X”c Then
                    If Me.TextLength = 10 Then
                        loDNIOK = True
                        loNIE = True
                    Else
                        ‘El NIE es incorrecto
                        loDNIOK = False
                        Me.BackColor = Drawing.Color.MistyRose
                        Me.loDNIOK = False
                        MsgBox(“El NIE debe tener 10 caracteres”)
                        ‘Habilitando la dos líneas siguiente forzamos una introducción válida
                        ‘Me.Focus()
                        ‘Me.SelectAll()
                    End If

                Else
                    If Me.TextLength > 9 Then
                        ‘El DNI es incorrecto
                        loDNIOK = False
                        Me.BackColor = Drawing.Color.MistyRose
                        Me.loDNIOK = False
                        MsgBox(“El DNI debe tener máximo 9 caracteres”)
                        ‘Habilitando la dos líneas siguiente forzamos una introducción válida
                        ‘Me.Focus()
                        ‘Me.SelectAll()
                    Else
                        loDNIOK = True
                    End If
                End If
            End If
        Else
            ‘Si el resultado es incorrecto por la longitud
            Me.BackColor = Drawing.Color.MistyRose
            Me.loDNIOK = False
            MsgBox(“El DNI debe tener almenos 8 caracteres”)
            ‘Habilitando la dos líneas siguiente forzamos una introducción válida
            ‘Me.Focus()
            ‘Me.SelectAll()
        End If
        ‘Si el resultado previo es correcto valido el DNI
        Dim DNI As Integer = Nothing
        Dim cadena As String = “TRWAGMYFPDXBNJZSQVHLCKE”
        If loDNIOK = True Then
            If loNIE = True Then
                DNI = CInt(Me.Text.Substring(1, Me.TextLength – 2))
            Else
                DNI = CInt(Me.Text.Substring(0, Me.TextLength – 1))
            End If
            Dim letra As String = cadena.Substring(DNI Mod 23, 1)
            If letra = dc Then
                loDNIOK = True
                Me.BackColor = Drawing.Color.PaleGreen
                Me.loDNIOK = True
            Else
                Me.BackColor = Drawing.Color.MistyRose
                Me.loDNIOK = False
            End If
        End If
    End Sub

    ‘Limitamos el máximo de caracteres a 10
    Public Overrides Property MaxLength() As Integer
        Get
            Return 10
        End Get
        Set(ByVal value As Integer)
            MyBase.MaxLength = 10
        End Set
    End Property

End Class

 

Tienes un archivo zip con el proyecto para que juegues con
el: Controles Tropicalia 0.1.zip