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. Valério Farias Disse:

    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. Valério Farias Disse:

    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. Valério Farias Disse:

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

  8. raldeson de lima leite Disse:

    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