Skip to content

Instantly share code, notes, and snippets.

@rafael-neri
Last active April 12, 2024 17:40
Show Gist options
  • Save rafael-neri/ab3e58803a08cb4def059fce4e3c0e40 to your computer and use it in GitHub Desktop.
Save rafael-neri/ab3e58803a08cb4def059fce4e3c0e40 to your computer and use it in GitHub Desktop.
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;
}
@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!

@VivianeScatolon
Copy link

Ola, por acaso algum de voces ja conseguiram colocar validador no user registration?

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