Skip to content

Instantly share code, notes, and snippets.

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;
}
@sr-adulis
Copy link

sr-adulis commented Jan 5, 2022

@rafael-neri Esbarrei no mesmo problema no wordpress, estou usando o plugin do Cláudio pra validação final de CPF, mas fiz esse código em javascript pra uma validação assim que o campo dispara a ação Blur e usei o código da receita pr validar o CPF:

Incluir código no Footer, não no header.

<script>
  const constCPF= document.getElementById('cpf');
  const form = document.getElementById('checkout_form');

  constCPF.addEventListener("focus", function(event){
    event.target.style.background = "white"
  }, true);

  constCPF.addEventListener("blur", function(event){
    var string = document.getElementById('cpf').value;
    var strCPF =  string.replace('.','').replace('-','').replace('.','') ;
    
    if (TestaCPF(strCPF)!=true){
      alert("CPF inválido")
      event.target.style.background = "#ff00007a"
    }else{
      event.target.style.background = "#00b6ff29"
    }
  }, true);

  function TestaCPF(strCPF) {
    var Soma;
    var Resto;
    Soma = 0;
  
    if (strCPF == "00000000000") return false;

    for (i=1; i<=9; i++) Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (11 - i);
    
    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;
  }

</script>

usei no footer, Ele deixa o campo Azul quando validado, e quando digitar um CPF invalido o campo fica vermelho e um alerta aparece na tela informando o usuário do erro.

Links de fontes dos códigos e lógicas usadas:

Verificação do CPF: https://www.devmedia.com.br/validar-cpf-com-javascript/23916
Outras discução do mesmo problema:https://wordpress.org/support/topic/problemas-com-validacao-do-cpf/
Pluggin do claudio:https://github.com/claudiosanches/woocommerce-extra-checkout-fields-for-brazil
Código de event trigger pra focus e blur:https://www.youtube.com/watch?v=kXq6tO5fqnU
Remoção de caracteres especiais do texto: https://pt.stackoverflow.com/questions/345075/como-receber-o-n%C3%BAmero-de-cpf-e-formatar-para-ficar-sem-os-pontos-e-tra%C3%A7oinput-m

@rafael-neri
Copy link
Author

rafael-neri commented Jan 5, 2022

@sr-adulis e demais:
Para a utilização no Front, eu recomendo o uso de uma Lib chamada js-brasil com validações brasileiras.
Segue abaixo um exemplo simples com JQuery.

<input type="text" id="cpf"/>

<script src="https://cdn.jsdelivr.net/npm/js-brasil/js-brasil.js"></script>
<script>
  $("#cpf").on("blur", function(){
      let cpf_value = $(this).val();
    
      if(jsbrasil.validateBr.cpf(cpf_value)) {
          alert("CPF Válido");
      } else {
    	  alert("CPF inválido")
      }
  });
</script>

Para testar o código acima: https://jsfiddle.net/d6ncju1f/

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