Mais de uma validação no mesmo campo Fabrik

Um único campo pode conter o CPF (para pessoa física) ou o CNPJ (para pessoa jurídica), e nesse vídeo vemos como montar uma validação para ambas as situações.

Código de Validação

 

if (preg_match('/^\d{3}\.\d{3}\.\d{3}-\d{2}$/', $data) == 1) {
$c = preg_replace('/\D/', '', $data);
if (strlen($c) != 11 || preg_match("/^{$c[0]}{11}$/", $c)) {
return false;
}
for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--) ;
if ($c[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return false;
}
for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--) ;
if ($c[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return false;
}
return true;
}

if (preg_match('/^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/', $data) == 1) {

$c = preg_replace('/\D/', '', $data);
if (strlen($c) != 14 || preg_match("/^{$c[0]}{14}$/", $c)) {
return false;
}
$b = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
for ($i = 0, $n = 0; $i < 12; $n += $c[$i] * $b[++$i]) ;
if ($c[12] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return false;
}
for ($i = 0, $n = 0; $i <= 12; $n += $c[$i] * $b[$i++]) ;
if ($c[13] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
return false;
}
return true;

}

// Créditos do Código: geekcom
// https://github.com/geekcom/validator-docs/blob/master/src/validator-docs/Validator.php