Identificação CPF ou CNPJ com mesma quantidade de caracteres

Olá, pessoal, preciso de ajuda em uma rotina para verificar se determinada coluna de um arquivo corresponde a um CPF ou CNPJ. O problema é o seguinte: a coluna em questão possui 17 posições, independente de se tratar de CPF ou CNPJ e ambos são preenchidos com 0 (zeros) a esquerda. Hoje já existe um método implementado que verifica se os últimos 14 caracteres correspondem a um CNPJ válido e, da mesma forma, se os últimos 11 caracteres correspondem a um CPF válido. Caso seja um CPF válido e não seja um CNPJ válido, ele retorna o número do CPF. Caso seja um CNPJ válido e não seja um CPF válido, ele retorna a raiz do CNPJ. Senão ele retorna o valor contido no arquivo, com 17 posições.
Isso funciona na grande maioria dos casos, mas acontece que alguns CNPJs podem conter números de CPF válidos, da mesma forma um CPF com mais três zeros a esquerda pode formar um número de CNPJ válido.
A questão é: como é possível diferenciar se um número é um CPF ou CNPJ sem ser pela quantidade de caracteres?

1 curtida

Considera apenas as últimas 14 posições (quantidade dígitos CNPJ).
Se a String começar com 3 zeros (à esquerda) ela vai ser um CPF.

PS: Não pesquisei nem nada. Mas imagino que seja impossível um CPF começar com “000”

Caio,

Obrigada pela resposta, mas na verdade é possível sim, o CNPJ do Banco do Brasil, por exemplo, é 00.000.000/0001-91…

1 curtida

Pow, sacanagem, acho que seria o caso de melhorar esse arquivo de exportação que estão enviando pra vocês aí , não? Troca ideia nesse sentido!

1 curtida

Dá uma força aí se puder -> Calcular saldo anterior

@Danieli_Feltrin os dois últimos númemos do cpf são gerados através de uma combinação feita com os 9 anteriores. Existe uma regra básica que diz que eles não podem ser todos iguais, ou seja, embora 00000000000 seja um cpf válido “pelo validador” ele não é “pela receita federal”.
Você pode tentar uma abordagem neste sentido, pegar os 11 últimos números, executar o procedimento e verificar se este número é um cpf válido.
Mas existe uma outra possibilidade, talvez mais “barata”: Ter uma outra coluna no arquivo que diga se o registro em questão se trata de uma pessoa jurídica ou física. Arquivos de banco e da receita costumam adotar esta abordagem ou então separar arquivos que tratam de pessoa física dos que tratam de pessoa jurídica.

Danieli, espero que você já tenha resolvido essa questão. Para os que estão chegando agora a resposta parece ser a seguinte:
Existem alguns CNPJs que são inválidos, mesmo se os dígitos verificadores baterem:

Não será considerado válido CNPJ com número de ORDEM igual a 0000
Não será considerado válido CNPJ com número de ORDEM maior do que 0300 e com as três primeiras posições do número BÁSICO com 000 (zeros). Esta crítica não será feita, quando o no básico do CNPJ for igual a 00.000.000

Ou seja, tirando o CNPJ do Banco do Brasil, nenhum outro CNPJ deve conter três zeros no início e ao mesmo tempo ter um número de ORDEM maior que 0300.
Se você receber um valor 00010000030160 sabe que não é um CNPJ, pois mesmo sendo um número válido tem uma ORDEM maior que 0300 e três zeros no início. Logo deve ser considerado como um CPF: 100.000.301-60’

1 curtida

O que é ORDEM maior que 0300?