Ir para conteúdo
gersonab

Validar CPF

Recommended Posts

tenho um formulário de cadastro, onde em um campo input tem o cadastro de um cpf, este consigo fazer a validação com o método blur por uma vez, se eu insistir no cpf errado ele aceita, teria uma forma de bloquear o cadastro com o cpf errado ?

<input type="text" name="cpfc" id="cpfc" class="form-control cpfcp"  value="" placeholder="99999999999">
<script>
  function validarCPF(cpfc) {	
    cpfc = cpfc.replace(/[^\d]+/g,'');	
    if(cpfc == '') return true;	
    // Elimina CPFs invalidos conhecidos	
    if (cpfc.length != 11 || 
        cpfc == "00000000000" || 
        cpfc == "11111111111" || 
        cpfc == "22222222222" || 
        cpfc == "33333333333" || 
        cpfc == "44444444444" || 
        cpfc == "55555555555" || 
        cpfc == "66666666666" || 
        cpfc == "77777777777" || 
        cpfc == "88888888888" || 
        cpfc == "99999999999")
      return false;		
    // Valida 1o digito	
    add = 0;	
    for (i=0; i < 9; i ++)		
      add += parseInt(cpfc.charAt(i)) * (10 - i);	
    rev = 11 - (add % 11);	
    if (rev == 10 || rev == 11)		
      rev = 0;	
    if (rev != parseInt(cpfc.charAt(9)))		
      return false;		
    // Valida 2o digito	
    add = 0;	
    for (i = 0; i < 10; i ++)		
      add += parseInt(cpfc.charAt(i)) * (11 - i);	
    rev = 11 - (add % 11);	
    if (rev == 10 || rev == 11)	
      rev = 0;	
    if (rev != parseInt(cpfc.charAt(10)))
      return false;		
    return true;   
  }

  var $input_cpfc = document.getElementById('cpfc');
  $input_cpfc.addEventListener("blur", function() {
    if (!validarCPF($input_cpfc.value)) {
      alert('CPF Inválido!');
      $input_cpfc = document.getElementById("cpfc").value="";
    }
  }, false);
</script>

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Higor, o que acontece, são dois campos onde faço essa validação, um cpf e outro cnpj, ambas funcionam uma vez, como informado acima, no entanto uma das duas podem estar vazias, a validação só acontece para verificar os dados, eu preciso que ao inserir pela segunda vez o cpf ou cnpj incorreto esta continue a validar, que não esta ocorrendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom dia a todos, no momento só estou conseguindo com reload na página apos o alert, teria como fazer um reload na função após o alert ?

var $input_cpfc = document.getElementById('cpfc');
$input_cpfc.addEventListener("blur", function() {
if (!validarCPF($input_cpfc.value)) {
alert('CPF Inválido!');
$input_cpfc = document.getElementById("cpfc").value="";
location.reload();
}
}, false);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@gersonab

 

HTML:

<input type="text"
       name="cpf"
       minlength="14"
       maxlength="18"
       placeholder="Forneça seu cpf"
       onkeypress="mask(this, cpf)" onblur="clearTimeout()"
       pattern="([0-9]{3}[\.][0-9]{3}[\.][0-9]{3}[-][0-9]{2})"
/>

Javascript:

function mask(o, f) {
    v_obj = o;
    v_fun = f;
    setTimeout('obMask()', 1);
}
function obMask() {
    v_obj.value = v_fun(v_obj.value);
}
function cpf(v) {
    v = v.replace(/\D/g, "");
    v = v.replace(/(\d{3})(\d)/, "$1.$2");
    v = v.replace(/(\d{3})(\d)/, "$1.$2");
    v = v.replace(/(\d{3})(\d{1,2})$/, "$1-$2");
    return v;
}

PHP:

if (preg_match('/^([0-9]{3}[\.][0-9]{3}[\.][0-9]{3}[-][0-9]{2})$/', $_POST['cpf'])) {
    // É Válido
} else {
    // CPF fornecido não é válido!
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala, gernsonab!

Lembre-se de que é importante fazer a validação pelo lado do servidor também, e não só pelo lado do cliente.

Essa inclusive é mais importante do que a do lado do cliente.

 

Considerando que usuários mal intencionados podem desabilitar o JS e submeter o formulário, e caso você não esteja fazendo a validação pelo lado do servidor, ele vai aceitar!

 

Um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por chocomilki
      Olá,
       
      Como que eu faço para que não seja possível fazer 2 ou mais cadastros usando o mesmo CPF ?
       
      Obrigado
       
       
    • Por robmig
      Olá amigos, sempre recorro a vocês AQUI dentro do fórum e sempre encontro boas referencias e dicas!
      Estou com um problema dentro do campo editar CPF.
       
      O que ocorre é:
       
      Quando acessado de dispositivos móveis, ao editar os números fica invisível a edição dos mesmos! o MAIS INTRIGANTE É QUE EM AGUNS CELULARES DÁ OUTROS NÃO DA!
      Já ao acessar o mesmo campo em Computadores a edição ocorre em perfeita ordem!
       
      O que pode ser?  EXISTE UMA EXPLICAÇÃO E CORREÇÃO?
       
      Segue algumas linhas do meu código:
       
      ===============MEU CÓDIGO ORIGINAL ===============
       
      <div class="form-group">
      <label class="col-md-2 control-label">CPF Titular</label>
      <div class="col-md-10">
      <input name="banco_cpf" maxlength="14" placeholder="000.000.000-00" id="cpf" value="<?php echo $dados_usuario[banco_cpf]; ?>" class="form-control" placeholder="CPF" required>
      </div>
      </div>
       
      ===============EDITADO COM UMA DICA: type="tel"===============
       
      <div class="form-group">
      <label class="col-md-2 control-label">CPF Titular</label>
      <div class="col-md-10">
      <input type="tel" name="banco_cpf" maxlength="11" placeholder="000.000.000-00" id="cpf" value="<?php echo $dados_usuario[banco_cpf]; ?>" class="form-control" placeholder="Só números" required>
      </div>
      </div>
       
      ===============
       
      }).trigger('focusout');
      $("#cpf").mask("999.999.999-99");
      $("#rg").mask("99.999.999-*");
      });
    • Por Cleudiney T Brandão
      Pessoal alguém me dá uma ajuda com Mysql por favor.
      Tenho uma coluna em meu BD que precisaria o seguinte: 
      Ela não é obrigatória mas se preenchida não poderia ter outras ocorrências dela.
      É um campo que ao meu ver seria UNIQUE mas que aceitasse NULL.
    • Por Cleudiney T Brandão
      Pessoal alguém me dá uma ajuda com Mysql por favor.
      Tenho uma coluna em meu BD que precisaria o seguinte: 
      Ela não é obrigatória mas se preenchida não poderia ter outras ocorrências dela.
      É um campo que ao meu ver seria UNIQUE mas que aceitasse NULL.
    • Por klonder
      Tentei incluir a máscara a seguir em um POST meu antigo, porém está fechado para novas respostas:
       
      Todavia, para futuras consultas minhas e também para ajudar outras pessoas, venho deixar uma máscara interessante que acabei de terminar em JavaScript.
      Ficou muito menor que a do POST acima:
      <script type="text/javascript"> var iCount1; var trava = false; function MaskDown(e) { if (trava == false) { iCount1 = e.value.length; trava = true; } } function MaskUp(e,mascara) { if (trava) { var textoLimpo = e.value.substr(0,iCount1+1).replace(/[\/\:\-\.]/g,""); var texto = ""; var iM = 0; var iT = 0; while (iM < mascara.length) { if (iT < textoLimpo.length) { if (mascara.substr(iM,1) == "#") { texto += textoLimpo.substr(iT,1); iT++; } else { texto += mascara.substr(iM,1); } } iM++; } e.value = texto; trava = false; } } </script> Para funcionar, basta incluir em suas tags input os eventos, como demonstrado a seguir:
      <input type="text" id="tfData" onkeydown="MaskDown(this)" onkeyup="MaskUp(this,'##/##/####')" placeholder="dd/mm/aaaa" style="width:80px" /> <br /><input type="text" id="tfHora" onkeydown="MaskDown(this)" onkeyup="MaskUp(this,'##:##')" placeholder="hh:mm" style="width:50px"/> À medida que o usuário vai digitando, o valor campo vai sendo formatado. Pode ser usado para CPF, CEP, RG, dentre outros...
       
      Divirtam-se!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.