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  
%> 

9 respostas para Validar CPF com expressão regular

  1. jair valerio de souza disse:

    eu preciso regular cpf

  2. Caroline disse:

    Se esse algoritmo estivesse certo, meu CPF estaria errado.
    É pra somar os 9 primeiro, pegar o MOD com 11, se for 0 ou 1 vira 0, se não 11- o MOD, e repetir a operação com o segundo, incluindo na soma o número conseguido?

  3. Willy disse:

    desejo cadastrar o meu cpf.

  4. alan disse:

    aqui funcionou. basta trocar a expressao regular para “\d{3}\.?\d{3}\.?\d{3}-?\d{2}”

  5. Valeu André sua solução me livrou de um problemão.

    Só um complemento para ela.

    Eliminar números maiores que 11 dígitos
    e sequencias de 1 – 9 (“11111111111”)

    if len(CPF_temp) > 11 then
    Retorno = false
    end if

    if CPF_temp = “11111111111” or CPF_temp = “22222222222” or CPF_temp = “33333333333” or CPF_temp = “44444444444” or CPF_temp = “55555555555” then
    Retorno = false
    end if

    if CPF_temp = “66666666666” or CPF_temp = “77777777777” or CPF_temp = “88888888888” or CPF_temp = “99999999999” or CPF_temp = “00000000000” then
    Retorno = false
    end if

  6. Só mais uma pequena mudança.

    ao invés de eliminar números maiores que 11 dígitos

    eliminar números diferentes de 11 digitos que valida tanto pra mais como pra menos.

    if len(CPF_temp) 11 then
    Retorno = false
    end if

  7. if len(CPF_temp) “” 11 then
    Retorno = false
    end if

  8. quero cadastrar cpf de forma obrigatoria anualmente, e nao esta em dias por nunca cadastrei. peço que mim ajude

  9. Gabriel Froes disse:

    Prezado André,

    Não vejo problema nenhum em copiar o código que fiz e colocar em seu site… o problema é que você não colocou nenhum crédito e nem o link original.

    (http://codigofonte.uol.com.br/codigo/asp/validacao/validar-cpf-com-expressao-regular)

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: