Skip to content

Instantly share code, notes, and snippets.

@estevan-ulian
Last active October 16, 2023 23:54
Show Gist options
  • Save estevan-ulian/863c69f7e89750a5942906932b125491 to your computer and use it in GitHub Desktop.
Save estevan-ulian/863c69f7e89750a5942906932b125491 to your computer and use it in GitHub Desktop.
Este snippet valida se o CPF e/ou CNPJ inserido possuem valores válidos no momento da submissão do formulário Gravity Forms. Os campos devem ter a classe `cpf` e/ou `cnpj`.
<?php
add_filter('gform_validation', 'validar_cpf_e_cnpj');
function validar_cpf_e_cnpj($validation_result) {
$form = $validation_result['form'];
foreach ($form['fields'] as $field) {
$value = rgpost("input_{$field['id']}");
$isActive = isActive($field, $form);
if ($isActive) {
if (strcmp($field['cssClass'], 'cpf') === 0 && !empty($value)) {
if (!validarCPF($value)) {
$field['failed_validation'] = true;
$field['validation_message'] = 'CPF inválido. Por favor, insira um CPF válido.';
$validation_result['is_valid'] = false;
}
}
if (strcmp($field['cssClass'], 'cnpj') === 0 && !empty($value)) {
if (!validarCNPJ($value)) {
$field['failed_validation'] = true;
$field['validation_message'] = 'CNPJ inválido. Por favor, insira um CNPJ válido.';
$validation_result['is_valid'] = false;
}
}
}
}
$validation_result['form'] = $form;
return $validation_result;
}
function isActive($field, $form) {
if (isset($field['conditionalLogic']) && $field['conditionalLogic']['enabled'] == 1) {
foreach ($field['conditionalLogic']['rules'] as $rule) {
$targetFieldId = $rule['fieldId'];
$targetFieldValue = $rule['value'];
// Verificar o tipo de ação (show/hidden)
if ($field['conditionalLogic']['actionType'] == 'show') {
// Verificar se o campo condicional está ativo
$targetField = GFFormsModel::get_field($form, $targetFieldId);
if ($targetField && rgpost("input_{$targetFieldId}") == $targetFieldValue) {
return true;
}
}
}
}
return false;
}
function validarCPF($cpf) {
$cpf = preg_replace('/[^0-9]/', '', $cpf);
if (strlen($cpf) != 11) {
return false;
}
if (preg_match('/^(\d)\1*$/', $cpf)) {
return false;
}
$soma = 0;
for ($i = 0; $i < 9; $i++) {
$soma += intval($cpf[$i]) * (10 - $i);
}
$resto = 11 - ($soma % 11);
$dv1 = ($resto == 10 || $resto == 11) ? 0 : $resto;
$soma = 0;
for ($i = 0; $i < 10; $i++) {
$soma += intval($cpf[$i]) * (11 - $i);
}
$resto = 11 - ($soma % 11);
$dv2 = ($resto == 10 || $resto == 11) ? 0 : $resto;
if ($dv1 == $cpf[9] && $dv2 == $cpf[10]) {
return true;
} else {
return false;
}
}
function validarCNPJ($cnpj) {
// Remover caracteres não numéricos
$cnpj = preg_replace('/[^0-9]/', '', $cnpj);
// Verificar se o CNPJ tem 14 dígitos
if (strlen($cnpj) != 14) {
return false;
}
// Verificar se todos os dígitos são iguais
if (preg_match('/^(\d)\1*$/', $cnpj)) {
return false;
}
// Calcular o primeiro dígito verificador
$soma = 0;
for ($i = 0; $i < 12; $i++) {
$soma += intval($cnpj[$i]) * (($i < 4) ? (5 - $i) : (13 - $i));
}
$resto = $soma % 11;
$dv1 = ($resto < 2) ? 0 : (11 - $resto);
// Calcular o segundo dígito verificador
$soma = 0;
for ($i = 0; $i < 13; $i++) {
$soma += intval($cnpj[$i]) * (($i < 5) ? (6 - $i) : (14 - $i));
}
$resto = $soma % 11;
$dv2 = ($resto < 2) ? 0 : (11 - $resto);
// Verificar se os dígitos verificadores são válidos
if ($dv1 == $cnpj[12] && $dv2 == $cnpj[13]) {
return true;
} else {
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment