Por Israel Aéce
israel@projetando.net
Israel Aéce Líder do Grupo Projetando.NET ( http://www.projetando.net ) e atualmente trabalha no desenvolvimento de Aplicações Web e Mobile, utilizando VB.NET e SQL Server.
Blog: http://weblogs.pontonetpt.com/israelaece/

Validacao de CPF

Na maioria das aplicações desenvolvidas para internet onde existem cadastros de clientes, usuários, etc é sempre necessário verificarmos se o C.P.F. digitado pelo usuário é ou não válido.

 

Para isso criamos a seguir uma função para que possamos utiliza-la em todo nosso projeto.

 

Abra o Visual Studio .NET e abra um novo projeto do tipo ASP.NET WebApplication.

Nesse mesmo projeto crie os seguintes controles (WebControls) no seu WebForm:

 

TextBox

ID: txtCPF

Custom Validator

            ID: cvCPF

            Error Message: "C.P.F. Inválido."

            ControltoValidate: txtCPF

Button

            ID: cmdValidar

            Text: Validar              

Label

            ID: lblMensagem

            Text: "C.P.F.: Válido."

            ForeColor: Red

            Visible: False

 

Sua página (WebForm) ficará como:

 

 

 

Depois de criado o WebForm adicione um módulo ao seu projeto. Para isso vá no Menu Project - Add New Item, selecione um "Module" e salve como Validacao.vb.

 

Criaremos a função de verificação em um módulo para que possamos utiliza-la em qualquer parte do projeto.

 

Primeiramente deveremos declarar todas as variáveis que utilizaremos:

 

 

A função "VerificaCPF" recebe como parâmetro o número do CPF do cliente. Ela retornará um valor booleano. Se retornar True o CPF é válido, caso contrário ele retornará False.

 

A variável "strCPFOriginal" recebe o parâmetro e retiramos os pontos "." e o hífen "-".

 

Armazenamos na variável "strCPF" o número do CPF sem os dois últimos dígitos. Isso porque devemos verificar se os dois últimos dígitos informados pelo usuário são válidos para o CPF. Devemos levar em consideração que o formato do C.P.F. é XXX.XXX.XXX-XX.

 

 

Depois disso, multiplicamos cada número da variável "strCPF" por contador que é iniciado com o valor 10 ("intMultiplicador")  e decrementando este contador de 1 em 1 e somamos à variável "intSoma".

 

Resgatamos o resto da divisão da variável "intSoma". Se for menor que 2 assumiremos 0. Caso contrário subtraímos da constante "constIntMultiplicador" o resto da divisão da variável "intSoma" pela constante "constIntMultiplicador".

 

 

 

Armazenamos na variável "strDigito" o primeiro dígito que descobrimos. Zeramos a variável "intSoma" para agora acharmos o segundo dígito.

 

Na variável "strCPFTemp" armazenamos o CPF original sem os dígitos (o valor está armazenado na variável "strCPF") junto com o primeiro dígito que descobrimos (o valor está armazenado na variável "strDigito").

 

Agora a variável "intMultiplicador" recebe o valor 11 porque adicionamos um novo número no CPF.

 

Depois disso, multiplicamos cada número da variável "strCPFTemp" por contador que é iniciado com o valor 11 ("intMultiplicador") e decrementando este contador de 1 em 1 e somamos à variável "intSoma".

 

Resgatamos o resto da divisão da variável "intSoma". Se for menor que 2 assumiremos 0. Caso contrário subtraímos da constante "constIntMultiplicador" o resto da divisão da variável "intSoma" pela constante "constIntMultiplicador".

 

 

 

 

 

Logo conseguimos o valor do segundo dígito. Atribuímos esse valor à variável "strDigito" qual está sendo responsável para armazenar os dígitos.

 

Finalmente verificamos se os dois dígitos que conseguimos coincidem com os dois últimos dígitos informados pelo usuário.

 

Se forem iguais a função retornará True, caso contrário False.

 

Depois de criada a função basta utilizarmos no evento "ServerValidate" do Custom Validator, passando como parâmetro o conteúdo da caixa de texto (txtCPF).

 

E no evento "Click" do Botão "Validar" verificamos se não ocorreu nenhum erro na página. Se retorna True visualizamos o "label" com a de que o C.P.F. está válido. Caso contrário o Custom Validator mostrará a mensagem "C.P.F. Inválido" e com isso ocultamos o "label".

 

O código ficará assim:

 

 

O Código na integra da função "VerificaCPF" está logo abaixo:

 

Module Validacao

 

    Public Function VerificaCPF(ByVal strCPFCliente As String) As Boolean

 

        '--Declaração das Variáveis

        Dim strCPFOriginal As String = strCPFCliente.Replace(".", "").Replace("-", "")

        Dim strCPF As String = Mid(strCPFOriginal, 1, 9)

        Dim strCPFTemp As String

        Dim intSoma As Integer

        Dim intResto As Integer

        Dim strDigito As String

        Dim intMultiplicador As Integer = 10

        Const constIntMultiplicador As Integer = 11

        Dim i As Integer

        '--------------------------

 

        For i = 0 To strCPF.ToString.Length - 1

            intSoma += CInt(strCPF.ToString.Chars(i).ToString) * intMultiplicador

            intMultiplicador -= 1

        Next

 

        If (intSoma Mod constIntMultiplicador) < 2 Then

            intResto = 0

        Else

            intResto = constIntMultiplicador - (intSoma Mod constIntMultiplicador)

        End If

 

        strDigito = intResto

        intSoma = 0

 

        strCPFTemp = strCPF & strDigito

        intMultiplicador = 11

 

        For i = 0 To strCPFTemp.Length - 1

            intSoma += CInt(strCPFTemp.Chars(i).ToString) * intMultiplicador

            intMultiplicador -= 1

        Next

 

        If (intSoma Mod constIntMultiplicador) < 2 Then

            intResto = 0

        Else

            intResto = constIntMultiplicador - (intSoma Mod constIntMultiplicador)

        End If

 

        strDigito &= intResto

 

        If strDigito = Mid(strCPFOriginal, 10, strCPFOriginal.Length) Then

            Return True

        Else

            Return False

        End If

 

    End Function

 

End Module

Dicas para quem está começando:
Veja os próximos eventos
que você não pode perder :

22/11/2008 SQL Launch -
Linhares - ES
Por : devASPNet


22/11/2008 SQL Launch- SQL Server 2008
Rio Paranaiba - Viçosa - MG
Por : devASPNet


22/11/2008 SQL Launch - SQL Server 2008
Volta Redonda - RJ
Por : devASPNet


22/11/2008 SQL Launch- SQL Server 2008
Franca - SP
Por : devASPNet


22/11/2008 SQL Launch - SQL Server 2008
Canoinhas - SC
Por : devASPNet


22/11/2008 SQL Launch - SQL Server 2008
Tefé - AM
Por : devASPNet


25/11/2008 SQL Launch - SQL Server 2008
Rio de Janeiro - RJ
Por : devASPNet


27/11/2008 SQL Lauch- SQL Server 2008
São Paulo - SP
Por : devASPNet


28/11/2008 SQL Launch - SQL Server 2008
São Paulo - SP
Por : devASPNet


29/11/2008 SQL Launch- SQL Server 2008
Pedro Leopoldo - MG
Por : devASPNet


29/11/2008 SQL Launch- SQL Server 2008
Petropolis - RJ
Por : devASPNet


29/11/2008 SQL Launch
Floriano - PI
Por : devASPNet


29/11/2008 SQL Launch - SQL Server 2008
Rio de Janeiro - RJ
Por : devASPNet


29/11/2008 SQL Launch - SQL Server 2008
Natal - RN
Por : devASPNet


29/11/2008 SQL Launch- SQL Server 2008
Santa Maria - RS
Por : devASPNet


29/11/2008 SQL Launch
Ituiutaba - MG
Por : devASPNet


5/12/2008 Cloud Computing e o Windows Azure
São Paulo - SP
Por : devASPNet


6/12/2008 SQL Server 2008 Community Launch
São Paulo - SP
Por : devASPNet

Leituras imperdíveis para quem está começando:

º Otimizando a performance no ASP.NET::..
º Criando objetos de paginação personalizados na grid::..
º Uma cesta de compras em ASP.NET::..
º Utilizando o Refresh de parâmetros no .NET::..
º ASP.NET FORMS Authentication::..
º Utilizando propriedades dinâmicas no .NET::..
º Corrigindo problemas de deleção em grid com paginação::..
º Cuidado com os componentes de validação::..
º Otimizando o InitializeComponent::..
º Movendo fonte de aplicações entre máquinas::..
º Agilizando a performance da IDE do VS.NET::..
º Utilizando Short Circuit no VB.NET::..


























  Parceiros:
20% de desconto para os membros do grupo na aquisição de livros e inscrição para eventos

Receba dicas de programação e programação .NET:
E-mail:
Incluir Excluir