PUBLICIDADE
Este código tem nota
9

Autor

gabriel

Gabriel Fróes

membro deste junho de 2006

Compartilhe e guarde

  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Faves: Fave It!

PUBLICIDADE

Enquete

Com que frequência você acessa o CódigoFonte.com.br?

Validar CPF com expressão regular


Esta função é muito útil na validação do CPF passado por parâmetro.

A função também verifica se o CPF está digitado no formato correto utilizando Expressão Regular.

Na função o CPF pode ser digitado em 2 formatos diferentes:
XXXXXXXXX-XX ou XXX.XXX.XXX-XX.
<%
'-----------------------------------------------------
'Funcao: IsCPF(ByVal intNumero)
'Sinopse: Verifica se o valor passado é um CPF válido
'          Formatos aceitos: XXX.XXX.XXX-XX ou
'                            XXXXXXXXXXXXXX
'Parametro: intNumero
'Retorno: Booleano
'Autor: Gabriel Fróes - www.codigofonte.com.br
'-----------------------------------------------------
Function IsCPF(ByVal intNumero)
    'Validando o formato do CPF com expressão regular
    Set regEx = New RegExp                            'Cria o Objeto Expressão
    regEx.Pattern = "d{3}.?d{3}.?d{3}-?d{2}"    ' Expressão Regular
    regEx.IgnoreCase = True                            ' Sensitivo ou não
    regEx.Global = True
    Retorno = RegEx.Test(intNumero)
    Set regEx = Nothing

    'Caso seja verdadeiro posso validar se o CPF é válido
    If Retorno = True Then
        'Validando a sequencia números
        Dim CPF_temp
        CPF_temp            = intNumero
        CPF_temp            = Replace(CPF_temp, ".", "")
        CPF_temp            = Replace(CPF_temp, "-", "")
        CPF_Digito_temp        = Right(CPF_temp, 2)
        
        'Somando os nove primeiros digitos do CPF
        Soma    = (Clng(Mid(CPF_temp,1,1)) * 10) + (Clng(Mid(CPF_temp,2,1)) * 9) + (Clng(Mid(CPF_temp,3,1)) * 8) + (Clng(Mid(CPF_temp,4,1)) * 7) + (Clng(Mid(CPF_temp,5,1)) * 6) + (Clng(Mid(CPF_temp,6,1)) * 5) + (Clng(Mid(CPF_temp,7,1)) * 4) + (Clng(Mid(CPF_temp,8,1)) * 3) + (Clng(Mid(CPF_temp,9,1)) * 2)
        '----------------------------------
        'Calculando o 1º dígito verificador
        '----------------------------------
        'Pegando o resto da divisão por 11
        Resto    = (Soma Mod 11)
        
        If Resto = 1 Or Resto = 0 Then
            DigitoHum = 0
        Else
            DigitoHum = Cstr(11-Resto)
        End If
        '----------------------------------
        '----------------------------------
        'Calculando o 2º dígito verificador
        '----------------------------------
        'Somando os 9 primeiros digitos do CPF mais o 1º dígito
        Soma    = (Clng(Mid(CPF_temp,1,1)) * 11) + (Clng(Mid(CPF_temp,2,1)) * 10) + (Clng(Mid(CPF_temp,3,1)) * 9) + (Clng(Mid(CPF_temp,4,1)) * 8) + (Clng(Mid(CPF_temp,5,1)) * 7) + (Clng(Mid(CPF_temp,6,1)) * 6) + (Clng(Mid(CPF_temp,7,1)) * 5) + (Clng(Mid(CPF_temp,8,1)) * 4) + (Clng(Mid(CPF_temp,9,1)) * 3) + (DigitoHum * 2)
        'Pegando o resto da divisão por 11
        Resto    = (Soma Mod 11)
        
        If Resto = 1 Or Resto = 0 Then
            DigitoDois = 0
        Else
            DigitoDois = Cstr(11-Resto)
        End If
        '----------------------------------
        'Verificando se os digitos são iguais aos digítados.
        DigitoCPF = Cstr(DigitoHum) & Cstr(DigitoDois)
        If Cstr(CPF_Digito_temp) = Cstr(DigitoCPF) Then
            Retorno = True
        Else
            Retorno = False
        End If
    End If
    IsCPF = Retorno
End Function
%>

Sim   Não   Este código foi útil para você?
NotaComentário
9
fabriciorj comentou em 8/5/2008

Melhorias na expressão regular

Muito útil a rotina Gabriel, obrigado!

Gostaria de sugerir uma modificação na expressão regular: ^(\d{3}\.\d{3}\.\d{3}-\d{2})|(\d{11})$.

Isso impossibilita uma 'mistura' de padrões (com/sem ponto decimal) no mesmo CPF.

Espero que seja útil.
Regras:
Os comentários seguem as seguintes regras:
  • Todos os comentários são enviados por membros cadastrados no site.
  • A pontuação de comentários de conteúdo do próprio membro não serão computados.
  • Os comentários serão pré-aprovados, porém a equipe do site revisará o conteúdo de todos os comentários podendo ser invalidados (inclusive a pontuação).
  • Os comentários precisam ter, obrigatóriamente, coerência sobre o conteúdo que será comentado.
  • O membro que atingir 5 comentários invalidados não poderá mais comentar dentro do site. Com isso o membro não poderá mais ganhar pontos com comentários.
  • Há um limite de 10 comentários por dia para cada membro.
  • Qualquer comentário após ter sido publicado poderá ser retirado através da opção ( denunciar)

Comente

     (ainda não tem cadastro? clique aqui!)


Máximo de 30 caracteres

Máximo de 255 caracteres
 

R&W Consulting - Soluções Web Hospedagem UOL HOST PagSeguro - solução para pagamentos online
© 2006-2009 R&W Informática Ltda. - Todos os direitos reservados.