PHP – Como validar CPF e CNPJ em PHP

Fernando Valler 04/04/2020 PHP


Abaixo temos duas funções para verificar se o número informado de CPF ou CNPJ é válido. Usamos muito em cadastros ou edição de usuários e clientes para checar a integridade desses dados. 

Vale lembrar que não é possível dizer se o número pertence a uma pessoa ou é um número registrado na base de dados da Receita Federal, para tal podemos fazer no site da Receita Federal ou em API que fornecem esse tipo de serviço.

// Validar numero de cpf
function validar_cpf($cpf) {

    // Verificar se foi informado
	if(empty($cpf))
		return false;

	// Remover caracteres especias
	$cpf = preg_replace('/[^0-9]/', '', $cpf);

	// Verifica se o numero de digitos informados
	if (strlen($cpf) != 11)
		return false;

  	// Verifica se todos os digitos são iguais
	if (preg_match('/(\d)\1{10}/', $cpf))
		return false;

    // Calcula os digitos verificadores para verificar se o
    // CPF é válido
	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;
}

// Validar numero de CNPJ
function validar_cnpj($cnpj) {

    // Verificar se foi informado
	if(empty($cnpj))
		return false;

	// Remover caracteres especias
	$cnpj = preg_replace('/[^0-9]/', '', $cnpj);

	// Verifica se o numero de digitos informados
	if (strlen($cnpj) != 14)
		return false;

  	// Verifica se todos os digitos são iguais
	if (preg_match('/(\d)\1{13}/', $cnpj))
		return false;

	$b = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];

    for ($i = 0, $n = 0; $i < 12; $n += $cnpj[$i] * $b[++$i]);

    if ($cnpj[12] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
        return false;
    }

    for ($i = 0, $n = 0; $i <= 12; $n += $cnpj[$i] * $b[$i++]);

    if ($cnpj[13] != ((($n %= 11) < 2) ? 0 : 11 - $n)) {
        return false;
    }

	return true;
}

Fernando Valler - Programador Web
Fernando Valler

Sou programador web, motivado por desafios e sempre buscando aprender algo novo. Aqui você pode encontrar alguns projetos.