| 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