Skip to content

Instantly share code, notes, and snippets.

@rafael-neri
Last active September 10, 2023 13:25
Star You must be signed in to star a gist
Embed
What would you like to do?
Validar CPF em PHP (Completo)
<?php
function validaCPF($cpf) {
// Extrai somente os números
$cpf = preg_replace( '/[^0-9]/is', '', $cpf );
// Verifica se foi informado todos os digitos corretamente
if (strlen($cpf) != 11) {
return false;
}
// Verifica se foi informada uma sequência de digitos repetidos. Ex: 111.111.111-11
if (preg_match('/(\d)\1{10}/', $cpf)) {
return false;
}
// Faz o calculo para validar o CPF
for ($t = 9; $t < 11; $t++) {
for ($d = 0, $c = 0; $c < $t; $c++) {
$d += $cpf[$c] * (($t + 1) - $c);
}
$d = ((10 * $d) % 11) % 10;
if ($cpf[$c] != $d) {
return false;
}
}
return true;
}
@rafaelfreba
Copy link

Valew! Código top, usei em meu projeto LARAVEL e funcionou perfeitamente. Parabéns!!!!

@MauricioSarmento
Copy link

eu faço assim

echo $cpf = formatar_cpf_cnpj('039.943.865-35');

function formatar_cpf_cnpj($doc) {

    $doc = preg_replace("/[^0-9]/", "", $doc);
    $qtd = strlen($doc);

    if($qtd >= 11) {

        if($qtd === 11 ) {

            $docFormatado = substr($doc, 0, 3) . '.' .
                            substr($doc, 3, 3) . '.' .
                            substr($doc, 6, 3) . '.' .
                            substr($doc, 9, 2);
        } else {
            $docFormatado = substr($doc, 0, 2) . '.' .
                            substr($doc, 2, 3) . '.' .
                            substr($doc, 5, 3) . '/' .
                            substr($doc, 8, 4) . '-' .
                            substr($doc, -2);
        }

        return $docFormatado;

    } else {
        return 'Documento invalido';
    }
}

@rafael-neri
Copy link
Author

@MauricioSarmento a ideia do script é verificar se o CPF é válido. E não apenas formatar.

@indianabytes
Copy link

Off: Chat GPT anda lendo teu git, pedi uma função em php para validar CPF e ele me mostrou praticamente o mesmo código! Seloko!

@juniormartinxo
Copy link

juniormartinxo commented Mar 1, 2023

Parabéns, man!

Tão boa que o Copilot já mapeou ela 😉, só "esqueceu" de corrigir o que o @jonasbraga comentou.

image

@rafael-neri
Copy link
Author

@indianabytes eu fui verificar e realmente ele mostra essa função no ChatGPT.

@juniormartinxo no caso do Copilot ele aprende com os códigos do Github.
Isso significa que tem muito código que ainda usa o formato antigo, sem as sugestões do @jonasbraga.

@indianabytes
Copy link

@_rafaelneri valeu meu jovem, sucesso e forte abraço!

@joao-pedro-alves
Copy link

Ele verifica a existência ou não do cpf?

Isso não é possivel fazer.

@KaikSilva
Copy link

Eu costumo validar o cpf (em javascript) assim, valida super bem, até mesmo se existe ou não

/*
* return true|false
*/
ValidaCPF(cpf){
    const strCPF = cpf.replaceAll(/\D/g , "");

    var Soma = 0;
    
    for (var i=1; i<=9; i++) {
        var Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (11 - i);
    }

    var Resto = (Soma * 10) % 11;

    if ((Resto == 10) || (Resto == 11))  Resto = 0;

    if (Resto != parseInt(strCPF.substring(9, 10)) ) {
        return false;
    }

    Soma = 0;

    for (i = 1; i <= 10; i++) {
        Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (12 - i)
    }

    Resto = (Soma * 10) % 11;

    if ((Resto == 10) || (Resto == 11))  Resto = 0;

    if (Resto != parseInt(strCPF.substring(10, 11) ) ) {
        return false;
    }
    return true;
}

@joao-pedro-alves
Copy link

Eu costumo validar o cpf (em javascript) assim, valida super bem, até mesmo se existe ou não

/*
* return true|false
*/
ValidaCPF(cpf){
    const strCPF = cpf.replaceAll(/\D/g , "");

    var Soma = 0;
    
    for (var i=1; i<=9; i++) {
        var Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (11 - i);
    }

    var Resto = (Soma * 10) % 11;

    if ((Resto == 10) || (Resto == 11))  Resto = 0;

    if (Resto != parseInt(strCPF.substring(9, 10)) ) {
        return false;
    }

    Soma = 0;

    for (i = 1; i <= 10; i++) {
        Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (12 - i)
    }

    Resto = (Soma * 10) % 11;

    if ((Resto == 10) || (Resto == 11))  Resto = 0;

    if (Resto != parseInt(strCPF.substring(10, 11) ) ) {
        return false;
    }
    return true;
}

Seu código não valida se existe um CPF, ele supostamente só valida se a sequência de números é uma sequência válida, isso não significa que o CPF exista de fato. São coisas diferentes. Unica maneira de se validar a existência de um CPF é através do site da Receita Federal.

@PantaneiroCG
Copy link

Show de bola, parabéns!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment