CF7: Validação de CPF/CNPJ

Este snippet adiciona uma validação completa para campos de CPF/CNPJ no Contact Form 7, garantindo que os valores inseridos pelos usuários sejam válidos antes de permitir a submissão do formulário. Isso melhora a integridade dos dados coletados e proporciona uma melhor experiência ao usuário.

0
				
					//Adicionando o JavaScript para Validação no Rodapé
function wp24horas_add_cpf_cnpj_validation_script() {
    ?>
    
        document.addEventListener('DOMContentLoaded', function() {
            document.addEventListener('wpcf7submit', function(event) {
                var cpfCnpjField = document.querySelector('[name="cpf_cnpj"]');
                if (cpfCnpjField && !isValidCpfCnpj(cpfCnpjField.value)) {
                    event.preventDefault();
                    alert('CPF/CNPJ inválido. Por favor, insira um valor válido.');
                }
            });

            function isValidCpfCnpj(value) {
                value = value.replace(/[\D]/g, ''); // Remove caracteres não numéricos
                if (value.length === 11) {
                    return isValidCpf(value);
                } else if (value.length === 14) {
                    return isValidCnpj(value);
                }
                return false;
            }

            function isValidCpf(cpf) {
                if (cpf.length !== 11 || /^(\d)\1{10}$/.test(cpf)) return false;
                var sum, rest;
                sum = 0;
                for (var i = 1; i <= 9; i++) sum += parseInt(cpf.substring(i - 1, i)) * (11 - i);
                rest = (sum * 10) % 11;
                if ((rest === 10) || (rest === 11)) rest = 0;
                if (rest !== parseInt(cpf.substring(9, 10))) return false;
                sum = 0;
                for (var i = 1; i = 1; i--) {
                    sum += numbers.charAt(length - i) * pos--;
                    if (pos < 2) pos = 9;
                }
                var result = sum % 11 = 1; i--) {
                    sum += numbers.charAt(length - i) * pos--;
                    if (pos < 2) pos = 9;
                }
                result = sum % 11 < 2 ? 0 : 11 - sum % 11;
                if (result !== parseInt(digits.charAt(1))) return false;
                return true;
            }
        });
    
     true));
}

function wp24horas_form_tag_cpf_cnpj($tag) {
    $tag = new WPCF7_FormTag($tag);
    $validation_error = wpcf7_get_validation_error($tag->name);
    $class = wpcf7_form_controls_class($tag->type);
    if ($validation_error) {
        $class .= ' wpcf7-not-valid';
    }
    $atts = array();
    $atts['type'] = 'text';
    $atts['name'] = $tag->name;
    $atts['value'] = $tag->get_default_option($tag->values);
    $atts['class'] = $tag->get_class_option($class);
    $atts['id'] = $tag->get_option('id', 'id', true);
    $atts['tabindex'] = $tag->get_option('tabindex', 'int', true);
    $atts['aria-required'] = $tag->is_required() ? 'true' : 'false';
    $atts['aria-invalid'] = $validation_error ? 'true' : 'false';
    return sprintf('<span class="wpcf7-form-control-wrap %1$s">%3$s</span>', sanitize_html_class($tag->name), wpcf7_format_atts($atts), $validation_error);
}


//Adicionando a Validação Personalizada no PHP
add_filter('wpcf7_validate_cpf_cnpj*', 'wp24horas_validate_cpf_cnpj', 20, 2);
add_filter('wpcf7_validate_cpf_cnpj', 'wp24horas_validate_cpf_cnpj', 20, 2);

function wp24horas_validate_cpf_cnpj($result, $tag) {
    $tag = new WPCF7_FormTag($tag);
    $name = $tag->name;
    $value = isset($_POST[$name]) ? trim($_POST[$name]) : '';
    if (!wp24horas_is_valid_cpf_cnpj($value)) {
        $result->invalidate($tag, 'CPF/CNPJ inválido.');
    }
    return $result;
}

function wp24horas_is_valid_cpf_cnpj($value) {
    $value = preg_replace('/[^0-9]/', '', $value);
    if (strlen($value) === 11) {
        return wp24horas_is_valid_cpf($value);
    } elseif (strlen($value) === 14) {
        return wp24horas_is_valid_cnpj($value);
    }
    return false;
}

function wp24horas_is_valid_cpf($cpf) {
    if (strlen($cpf) != 11 || preg_match('/(\d)\1{10}/', $cpf)) {
        return false;
    }
    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;
}

function wp24horas_is_valid_cnpj($cnpj) {
    if (strlen($cnpj) != 14 || preg_match('/(\d)\1{13}/', $cnpj)) {
        return false;
    }
    $t = 12;
    for ($d = 0, $p = 5, $c = 0; $c < $t; $c++) {
        $d += $cnpj[$c] * $p;
        $p = ($p == 2) ? 9 : $p - 1;
    }
    $d = ((10 * $d) % 11) % 10;
    if ($cnpj[$c] != $d) {
        return false;
    }
    $t = 13;
    for ($d = 0, $p = 6, $c = 0; $c < $t; $c++) {
        $d += $cnpj[$c] * $p;
        $p = ($p == 2) ? 9 : $p - 1;
    }
    $d = ((10 * $d) % 11) % 10;
    if ($cnpj[$c] != $d) {
        return false;
    }
    return true;
}

				
			

Quer ajuda de um especialista para implementar?

Instruções de Uso

Explicação do Snippet

  1. Adicionando JavaScript para Validação:
    • O script é adicionado ao rodapé da página.
    • Ele ouve o evento wpcf7submit do Contact Form 7 para verificar o valor do campo CPF/CNPJ antes de enviar o formulário.
    • Se o CPF/CNPJ não for válido, a submissão do formulário é impedida e uma mensagem de erro é exibida.
  2. Adicionando a Tag de Formulário Personalizada:
    • Um novo tipo de campo cpf_cnpj é registrado para ser usado nos formulários do Contact Form 7.
    • O campo é criado com base nas especificações do Contact Form 7 e inclui atributos necessários para a validação.
  3. Adicionando a Validação Personalizada no PHP:
    • As funções de validação para CPF e CNPJ são adicionadas para validar os valores no lado do servidor.
    • Os filtros wpcf7_validate_cpf_cnpj* e wpcf7_validate_cpf_cnpj são usados para aplicar a validação ao campo personalizado.

Instruções de Uso

  1. Adicione o código ao arquivo functions.php do seu tema ou em um plugin específico.
  2. No formulário do Contact Form 7, adicione um campo com o tipo [cpf_cnpj].

Outros Snippets

WooCommerce
Este snippet cria um shortcode que exibe os detalhes de uma reserva do WooCommerce com base no ID do pedido fornecido na URL.
WordPress
Este snippet redireciona todos os visitantes do site que não estejam logados para uma página específica (não a página de login).
WordPress
Este snippet redireciona todos os visitantes do site que não estejam logados para a página de login do WordPress. Isso é útil se você deseja restringir o acesso ao conteúdo do seu site apenas para usuários autenticados.

Últimos Posts

Como Criar um Tema WordPress Simples do Zero

Como Criar um Tema WordPress Simples do Zero

Aprenda como estruturar um tema básico no WordPress e entenda os arquivos principais e os templates comuns necessários

Anatomia de um Tema Avançado no WordPress

Anatomia de um Tema Avançado no WordPress

Conheça estrutura de um tema avançado, com foco nos arquivos essenciais e na hierarquia de templates, usando o Twenty Twenty-Three como exemplo

Onde Fica o HTML do WordPress? Perguntas Frequentes #006

Onde Fica o HTML do WordPress? Perguntas Frequentes #006

vamos abordar as principais questões sobre HTML no WordPress e responder algumas dúvidas frequentes, incluindo perguntas específicas de inscritos no nosso canal no YouTube

Configurações Essenciais no .htaccess para Proteger Seu WordPress

Configurações Essenciais no .htaccess para Proteger Seu WordPress

Aprenda como usar o .htaccess para melhorar a segurança do WordPress, bloqueando arquivos, diretórios e configurando restrições

Protegendo o Arquivo wp-config.php Segurança Avançada para WordPress

Protegendo o Arquivo wp-config.php: Segurança Avançada para WordPress

Vamos explorar duas estratégias eficazes para proteger o arquivo wp-config.php: movê-lo para fora do diretório público e configurar permissões restritivas.

Senhas Fortes e 2FA: Proteja Seu WordPress Contra Acessos Não Autorizados

Senhas Fortes e 2FA: Proteja Seu WordPress Contra Acessos Não Autorizados

Senhas fortes e autenticação em dois fatores (2FA) são essenciais para proteger seu site contra invasões e acessos não autorizados

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Você precisa estar logado para ver esta informação.

Adicione seu Snippet

Título *
Resumo *
Descrição Completa *
Código *
Instruções de uso *

Solicitar Orçamento

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! 

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!