Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bernardinoandre

Validar CPF em formulário

Recommended Posts

Pessoal, preciso de ajuda.

Eu estou realizando um trabalho da faculdade na qual preciso colocar 3 validações no formulário do CPF que são eles:

 

1. Se o usuário não digitou 11 caracteres (um CPF é composto de 9 dígitos de identificação e 2 dígitos de verificação) deve apresentar o erro: "CPF tem de ter 11 dígitos".

 

2. Se nem todos caracteres digitados são dígitos. Ou seja, se digitarem um "ponto" (.) deve apresentar o erro: "CPF só pode ter dígitos, caracter . inválido!"

 

3. Se os dígitos de verificação estão incorretos. Deve apresentar o erro: "Dígitos verificadores inválidos!"

 

Eu tenho o código abaixo, porém, ele apresenta os seguintes erros: Mesmo eu digitando meu CPF, ele apresenta o erro: "CPF deve ter 11 Dígitos". Ele não reconhece o erro se eu digitar qualquer caracter e ele não está identificando o dígito verificador.

 

Sou super iniciante. Quando forem explicar, tenham uma certa paciência, por favor. Se precisarem, envio a página em html. Muito Obrigado!

 

Código:

 

<script>

function calculaDV(num) {

var resto = 0, soma = 0;

for ( i = 2; i <11; i++) {

soma = soma + ((num % 10) * i);

num = parseInt(num / 10);

}

resto = (soma % 11);

return (resto > 1) ? (11 - resto) : 0;

}

function VerificaCPF ( campo ) {

var i, c, cpf;

var iniCPF;

var strCPF = campo.value;

 

if ( strCPF.lenght != 11){

alert("CPF tem de ter 11 digitos");

return false;

}

for ( i = 0; 1 < 11; i++ ) {

c = strCPF.charAt(i);

if ( (c < '0') || (c > '9')) {

alert("CPF so pode ter digitos, caracter " +

c + "invalido!");

return false;

}

}

iniCPF = strCPF.substring(0, 9);

pd = calculaDV(iniCPF);

sd = calculaDV(iniCPF * 10 + pd);

if ( (pd != strCPF.charAt(9)) || (sd !=strCPF.charAt(10)) ) {

alert("Digitos verificadores invalidos!");

return false;

}

return true;

}

</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

- Length está escrito da forma errada lá, esta com ht e não th;

- var strCPF = campo.value; coloca var strCPF = (campo.value).trim(); usuário pode dar espaço e .trim() tira espaços no início e fim;

- Troca a verificação de somente números por !isNaN

Ficaria algo assim:

if (!isNaN(parseFloat(strCPF)) && isFinite(strCPF)) {
    return true;
}else{
    alert("CPF deve conter apenas números");
    return false;
}

Mas como se ele passasse a verificação de letras já ia para verificação do dv do CPF coloquei tudo junto se ver que não é texto já calcula para ver se é válido.

if (!isNaN(parseFloat(strCPF)) && isFinite(strCPF)) {
    iniCPF = strCPF.substring(0,9);
    pd = calculaDV(iniCPF);
    sd = strCPF.substring(9,10);
    if (pd != sd)
        {
        alert("Digitos verificadores invalidos!");
        return false;
        }
}else{
    alert("CPF deve conter apenas números");
    return false;
}
}

Mas tem um problema que usei sd = strCPF.substring(9,10); que pega somente o penultimo caracter e comparo com o calculo da função calculaDV... isto é: sua função calculaDV só verifica o primeiro digito verificador do CPF, que são dois, se o último estiver errado vai passar errado... você tem de calcular os dois e comparar... Mas como está agora funcionaria. Só termina a função de calculo do CPF.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ronaldo, sem problemas. Chegando em casa, irei realizar as substituições. Posto aqui pra você o resultado.
Sobre o Dígito Verificador, sem problemas. Tá bom. Já ajuda, de alguma forma. Qualquer coisa deixo sem fazer esse detalhe. Vai que ele nem perceba... risos.

 

Apenas resumindo, além de corrigir o erro da forma Length, eu altero, também, o 2º código que você colocou tudo junto, certo? Esse código eu irei alterar da linha "if ( strCPF.lenght != 11){" até os dois colchete encerrando com </script> de meu código, Certo?

Desde já, valeu pelo apoio. À noite realizo as alterações e os testes.

Muito Obrigado mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é difícil fazer, procura no google sobre com é fazer o cálculo do CPF (não código, mas o calculo em si)... depois, se não conseguir criar do zero, pega um pronto (tem de monte por aí) e veja se entende como eles fizeram para recriar em Js a formula.

Não coloquei nenhum justamente porque só fuçando que a gente aprende.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com certeza. Eu só recorri ao fórum mesmo, pra entender se havia erro no código e haviam, além de outras dicas que você me deu.

Assim que chegar em casa, realizei todo o procedimento e posto aqui o feedback.

Mas desde já, valeu mesmo!

 

 

Ronaldo, valeu pelo apoio. Mas no código, apenas funcionou o alerta de quando tem menos 11 dígitos e quando o dígito verificador é inválido. Quando digitamos caracter inválido ele não reconhece.

Dei uma rodada no google, mas não consegui algo que funcionasse.

Vou manter assim mesmo no trabalho. Talvez eu que esteja colocando algo de errado.

Mas valeu pelo apoio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ronaldo, descobri o que houve.

 

No código, o FOR estava assim:

 

for ( i = 0; 1 < 11; i++ )

 

e o certo é

 

for ( i = 0; i < 11; i++ )

 

Agora, tuuuudo ok! Valeeeeuuuuu

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida, referente cálculo de valores em tempo real.

      Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado.

      Quero mostrar o RESULTADO assim: 0,00  ou  0.00

      Abaixo posto o código.
      jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando })  
       
      Grato,
       
      Cesar
       
       
    • Por violin101
      Caro amigos, saudações.

      Tenho uma tabela escrita em JS que funciona corretamente.
       
      Minha dúvida:
      - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ?

      Abaixo posto o script:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar  
      Grato,

      Cesar
       
    • Por violin101
      Caros amigos, saudações.

      Estou com uma pequena dúvida se é possível ser realizado.

      Preciso passar 2 IDs para o Sistema executar a função, estou utilizando desta forma e gostaria de saber como faço via JS para passar os parâmetro que preciso.

      Observação:
      Dentro da TABELA utilizei 2 Forms, para passar os IDS que preciso, funcionou conforme código abaixo.
      <div class="card-body"> <table id="tab_clie" class="table table-bordered table-hover"> <thead> <tr> <th style="text-align:center; width:10%;">Pedido Nº</th> <th style="text-align:center; width:10%;">Data Pedido</th> <th style="text-align:center; width:32%;">Fornecedor</th> <th style="text-align:center; width:10%;">Status</th> <th style="text-align:center; width:5%;">Ação</th> </tr> </thead> <tbody> <?php foreach ($results as $r) { $dta_ped = date(('d/m/Y'), strtotime($r->dataPedido)); switch ($r->pd_status) { case '1': $status = '&nbsp;&nbsp;Aberto&nbsp;&nbsp;'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#000000'; //Cor: Preta break; case '2': $status = 'Atendido Total'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#086108'; //Cor: Verde break; case '3': $status = 'Atendido Parcial'; $txt = '#000000'; //Cor: Branco $cor = '#FEA118'; //Cor: Amarelo break; default: $status = 'Cancelado'; $txt = '#FFFFFF'; //Cor: Branco $cor = '#D20101'; //Cor: Vermelho break; } echo '<tr>'; echo '<td width="10%" height="10" style="text-align:center;">'.$r->pd_numero.'</td>'; echo '<td width="10%" height="10" style="text-align:center;">'.$dta_ped.'</td>'; echo '<td width="32%" height="10" style="text-align:left;">'.$r->nome.'</td>'; echo '<td width="10%" height="10" style="text-align:left;"><span class="badge" style="color:'.$txt.'; background-color:'.$cor.'; border-color:'.$cor.'">'.$status.'</span></td>'; echo '<td width="5%" style="text-align:center;">'; ?> <div class="row"> <?php if($this->permission->checkPermission($this->session->userdata('permissao'), 'vPedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/visualizar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-warning" title="Visualizar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-search icon-white"></i></button> </form> <?php } if($this->permission->checkPermission($this->session->userdata('permissao'), 'ePedido')){ ?> <form action="<?= base_url() ?>compras/pedidos/editar" method="POST" > <input type="hidden" name="idPedido" value="<?php echo $r->idPedidos; ?>"> <input type="hidden" name="nrPedido" value="<?php echo $r->pd_numero; ?>"> <button class="btn btn-primary" title="Editar" style="margin-left:50%; padding: 1px 3px;"><i class="fa fa-edit icon-white"></i></button> </form> <?php } ?> </div> <?php echo '</td>'; echo '</tr>'; } ?> </tbody> </table> </div>
      Grato,

      Cesar.
    • Por belann
      Olá!
       
      Estou usando o editor quill em uma página html, sem fazer a instalação com npm, mas usando as api´s via internet com http, no entanto não consigo fazer a tecla enter funcionar para mudança de linha, tentei essa configuração abaixo, mas não funcionou.
       
      modules: {       syntax: true,       toolbar: '#toolbar-container',       keyboard: {         bindings: {           enter: {             key: 13,             handler: function(range, context) {                       quill.formatLine(range.index, range.length, { 'align': '' });             }           }  
       
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de poder tirar uma dúvida com os amigos.
       
      Como faço uma função para Comparar a Data Digitada pelo o Usuário com a Data Atual ?

      Data Digitada:  01/09/2024
       
      Exemplo:
      25/09/2024 é menor que DATA Atual  ====> mensagem: informe uma data válida.
      25/09/2024 é igual DATA Atual ===> o sistema libera os INPUT's.
       
      Como faço uma comparação com a Data Atual, para não Deixar Gravar Data retroativa a data Atual.
       
      Grato,
       
      Cesar
×

Informação importante

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