Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Como validar CPF com JavaScript no LimeSurvey (incluindo feedback visual)

  • edllyn
  • edllyn's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
4 weeks 2 hours ago - 3 weeks 6 days ago #268116 by edllyn
Por favor, ajude-nos a ajudá-lo e preencha os seguintes campos:.
A sua versão do LimeSurvey: Version 6.0.4+230427
Servidor próprio ou LimeSurvey Cloud: Servidor proprio.
Modelo de desenho utilizado: Vanilla
==================
Por favor, ajudem com a seguinte questão:Estou tentando implementar uma validação de CPF na minha pesquisa no LimeSurvey. Meu objetivo é:
  1. Validar CPFs no formato XXX.XXX.XXX-XX.
  2. Rejeitar CPFs inválidos (ex.: 111.111.111-11, 123.456.789-00.
  3. Mostrar bordas verdes para CPFs válidos e bordas vermelhas para inválidos.
  4. Exibir uma mensagem de alerta para CPFs inválidos.
O script não está funcionando como esperado para CPFs inválidos, como 111.111.111-11. Não sei se a manipulação das bordas deve ser feita na aba Script ou se deveria configurar algo nas outras abas (como Input ou Display). Como corrigir o script para validar CPFs corretamente (rejeitando os inválidos como 111.111.111-11)?

File Attachment:

File Name: limesurvey...2292.lss
File Size:968 KB
Preciso mover a manipulação do estilo (bordas verdes/vermelhas) para outra aba ou configuração?

 
Last edit: 3 weeks 6 days ago by edllyn.

Please Log in to join the conversation.

  • holch
  • holch's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
4 weeks 1 hour ago #268118 by holch

O script não está funcionando como esperado para CPFs inválidos, como


Como o script determina que é um CPF valido e que não é? Qual a regra?

O ideal é sempre fornecer um arquivo LSS com só as perguntas em questão. Porque com o print da tela até da para olhar mais ou menos o que você fez, mas não da para 'brincar'. Para saber o que está dando errado, precisa ver, precisa testar. Assim quase impossível dizer algo. Facilita a vida dos voluntários no fórum. Ninguém vai digitar o seu script para ver o que está fazendo.

I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.

Please Log in to join the conversation.

  • edllyn
  • edllyn's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
3 weeks 6 days ago #268122 by edllyn
Olá! Obrigado pelo retorno.

O script verifica a validade do CPF usando as seguintes regras:
  1. Formato do CPF: O CPF deve conter 11 dígitos numéricos. Qualquer CPF com formato diferente (como com letras ou com menos/more números) é considerado inválido.
  2. Dígitos verificadores: O script realiza os cálculos para validar os dois dígitos verificadores (os últimos dois números do CPF), conforme a fórmula oficial. Isso envolve:
  • Multiplicar os 9 primeiros dígitos por uma sequência específica de números.
  • Calcular o resto da divisão da soma por 11 e determinar os dígitos verificadores.
  • Verificar se os dígitos calculados coincidem com os do CPF fornecido.
Se o CPF não atender a esses critérios, ele é considerado inválido.

Subi o arquivo .LSS com o script para facilitar os testes. Agora ele está listado na pergunta

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 weeks 6 days ago #268125 by Joffm
Minha sugestão:
1.Pergunta (tipo: Entrada numérica)

2.JavaScript (Codigo fonte de pergunta)
Code:
<script type="text/javascript" charset="utf-8">
$(document).ready(function () {
 
    $('#question{QID}  input[type="text"]').keyup(function(){
 
        var cpf=$('#question{QID}  input[type="text"]').val();
        if(cpf.length==11) {
            if (!isCPFValido(cpf)) {
                alert("CPF inválido! Por favor, insira novamente.");
                $('#question{QID}  input[type="text"]').val(""); // Limpa o campo
            }
        }
    });
});
 
 
function isCPFValido(cpf) {
    // Remove caracteres não numéricos
    cpf = cpf.replace(/\D/g, "");   // ????
 
    // Verifica se o CPF tem 11 dígitos e não é formado por números repetidos
    if (cpf.length !== 11 || /^(\d)\1+$/.test(cpf)) {
      return false;
    }
    // Calcula o primeiro e o segundo dígito verificador
      const calcDigito = (base) => {
      const soma = base.reduce((acc, num, i) => acc + num * (base.length + 1 - i), 0);
      const resto = soma % 11;
      return resto < 2 ? 0 : 11 - resto;
    };
 
    const nums = cpf.split("").map(Number);
    const digito1 = calcDigito(nums.slice(0, 9));
    const digito2 = calcDigito(nums.slice(0, 10));
 
    // Verifica se os dígitos verificadores estão corretos
    return digito1 === nums[9] &amp;&amp; digito2 === nums[10];
}
</script>

3. Fórmula de validação
strlen(self)==11;

Dica de validação da pergunta
Por favor, insira CPF válido!

 

 

O que é aquilo?
 
Estas não são classes CSS

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

Moderators: holchtpartner

Lime-years ahead

Online-surveys for every purse and purpose