Cadastro Nacional da Pessoa Jurídica

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de CNPJ)
Ir para: navegação, pesquisa

No Brasil, o Cadastro Nacional da Pessoa Jurídica (acrônimo: CNPJ) é um número único que identifica uma pessoa jurídica e outros tipos de arranjo jurídico sem personalidade jurídica (como condomínios, orgãos públicos, fundos)[1] junto à Receita Federal brasileira (órgão do Ministério da Fazenda). O CNPJ compreende as informações cadastrais das entidades de interesse das administrações tributárias da União, dos Estados, do Distrito Federal e dos Municípios[2] e é necessário para processar (Art. 15, da Lei 11.419/2006)[3]. O CNPJ veio substituir o CGC, Cadastro Geral de Contribuintes e por vezes também é grafado como CNPJ-MF.

O Cadastro funciona como uma identidade e nele estão informados:

  • Data de abertura,
  • Nome da empresa,
  • Título ou nome fantasia - se tiver,
  • Código e descrição da atividade econômica principal - o CNAE,
  • Código e descrição das atividades econômicas secundárias - se tiver,
  • Código e descrição da natureza jurídica,
  • Endereço e
  • Situação cadastral - Na consulta realizável na página da internet da Receita Federal.

O CNPJ deve estar informado em qualquer nota fiscal de qualquer empresa, bem como na embalagem de qualquer produto industrializado.

Formato[editar | editar código-fonte]

Os números do Cadastro Nacional de Pessoa Jurídica possuem 14 dígitos:

Exemplo: XX.XXX.XXX/YYYY-ZZ

Os oito primeiros números (XX.XXX.XXX) formam a "raiz", que identifica a empresa. Os quatro dígitos seguintes após a barra (YYYY) formam o sufixo, que identifica uma unidade de atuação de empresa, ou seja, um endereço de atividade da pessoa jurídica e os dois últimos, após o traço (ZZ) formam o "dígito verificador", que é resultado de uma equação com os doze números anteriores. Deste modo, os CNPJs no formato XX.XXX.XXX/0001-ZZ identificam a matriz da empresa.

Algoritmo de Validação[editar | editar código-fonte]

Pseudocódigo[editar | editar código-fonte]

function ValidarCNPJ(cnpj: int[14]) -> bool
    var v: int[2]

    //Nota: Calcula o primeiro dígito de verificação.
    v[1] := 5×cnpj[1] + 4×cnpj[2]  + 3×cnpj[3]  + 2×cnpj[4]
    v[1] += 9×cnpj[5] + 8×cnpj[6]  + 7×cnpj[7]  + 6×cnpj[8]
    v[1] += 5×cnpj[9] + 4×cnpj[10] + 3×cnpj[11] + 2×cnpj[12]
    v[1] := 11 - v[1] mod 11
    v[1] := 0 if v[1] ≥ 10

    //Nota: Calcula o segundo dígito de verificação.
    v[2] := 6×cnpj[1] + 5×cnpj[2]  + 4×cnpj[3]  + 3×cnpj[4]
    v[2] += 2×cnpj[5] + 9×cnpj[6]  + 8×cnpj[7]  + 7×cnpj[8]
    v[2] += 6×cnpj[9] + 5×cnpj[10] + 4×cnpj[11] + 3×cnpj[12]
    v[2] += 2×cnpj[13]
    v[2] := 11 - v[2] mod 11
    v[2] := 0 if v[2] ≥ 10

    //Nota: Verdadeiro se os dígitos de verificação são os esperados.
    return v[1] = cnpj[13] and v[2] = cnpj[14]

Delphi[editar | editar código-fonte]

function ValidarCNPJ(CNPJ: String): Boolean;
var vCNPJ, vDigito: String;
    DF1, DF2: Integer;
begin
  Result := False;
 
  vCNPJ := CNPJ;
 
  // Removendo caracteres especiais
  vCNPJ := StringReplace( vCNPJ, '.', '', [rfReplaceAll] );
  vCNPJ := StringReplace( vCNPJ, '-', '', [rfReplaceAll] );
  vCNPJ := StringReplace( vCNPJ, '/', '', [rfReplaceAll] );
 
  // Verificar tamanho dos dígitos do CNPJ
  if ( Length( vCNPJ ) <> 14 ) then
    Exit;
 
  // Armazena o número do CNPJ e o digito separados
  vDigito := Copy( vCNPJ, 13, 02 );
  vCNPJ   := Copy( vCNPJ, 01, 12 );
 
  // Somar e multiplicar os pesos do digito 1 em cada número
  DF1 :=       (StrToInt(vCNPJ[01])*05) + (StrToInt(vCNPJ[02])*04);
  DF1 := DF1 + (StrToInt(vCNPJ[03])*03) + (StrToInt(vCNPJ[04])*02) + (StrToInt(vCNPJ[05])*09);
  DF1 := DF1 + (StrToInt(vCNPJ[06])*08) + (StrToInt(vCNPJ[07])*07) + (StrToInt(vCNPJ[08])*06);
  DF1 := DF1 + (StrToInt(vCNPJ[09])*05) + (StrToInt(vCNPJ[10])*04) + (StrToInt(vCNPJ[11])*03) + (StrToInt(vCNPJ[12])*02);
 
  // Cálculo da diferença de 11 com o resto de DF1
  DF1 := 11 - ( DF1 mod 11 );
 
  // Se o resultado anterior for maior ou igual a 10, o dígito 1 é 0,
  // caso contrário, o digito 1 é o próprio resultado.
  if DF1 >= 10 then DF1 := 0;
 
  // Somar e multiplicar os pesos do digito 2 em cada número
  DF2 :=       (StrToInt(vCNPJ[01])*06) + (StrToInt(vCNPJ[02])*05);
  DF2 := DF2 + (StrToInt(vCNPJ[03])*04) + (StrToInt(vCNPJ[04])*03) + (StrToInt(vCNPJ[05])*02);
  DF2 := DF2 + (StrToInt(vCNPJ[06])*09) + (StrToInt(vCNPJ[07])*08) + (StrToInt(vCNPJ[08])*07);
  DF2 := DF2 + (StrToInt(vCNPJ[09])*06) + (StrToInt(vCNPJ[10])*05) + (StrToInt(vCNPJ[11])*04) + (StrToInt(vCNPJ[12])*03);
 
  // Somar o resultado do digito 2 com o dobro do digito 1
  DF2 := DF2 + ( DF1 * 2 );
 
  // Cálculo da diferença de 11 com o resto de DF2
  DF2 := 11 - ( DF2 mod 11 );
 
  // Se o resultado anterior for maior ou igual a 10, o dígito 2 é 0,
  // caso contrário, o digito 2 é o próprio resultado.
  if DF2 >= 10 then DF2 := 0;
 
  // Retorna verdadeiro ou falso, caso o dígito informado coincida ou não com o calculado
  Result := vDigito = IntToStr(DF1) + IntToStr(DF2);
end;


Javascript[editar | editar código-fonte]

String.prototype.isCNPJ = function() {  
    var b = [6,5,4,3,2,9,8,7,6,5,4,3,2], c = this;
    if((c = c.replace(/[^\d]/g,"").split("")).length != 14)
        return false;
    for (var i = 0, n = 0; i < 12; n += c[i] * b[++i]); 
    if(c[12] != (((n %= 11) < 2) ? 0 : 11 - n))
        return false; 
    for (var i = 0, n = 0; i <= 12; n += c[i] * b[i++]); 
    if(c[13] != (((n %= 11) < 2) ? 0 : 11 - n))
        return false; 
    return true; 
};

PHP[editar | editar código-fonte]

function validarCnpj($c) {  
  $b = array(6,5,4,3,2,9,8,7,6,5,4,3,2);
  if(strlen($c = preg_replace("/[^\d]/", "", $c)) != 14)
    return false;
  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; 
}

C#[editar | editar código-fonte]

        public static bool iscnpj(string cnpj)
        {
            int[] conj1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] conj2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int scale;
            int restante;
            string tudo;
            string cnpjtemporario;
            tudo = "";
            cnpj = cnpj.Trim();
            cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");
            if (cnpj.Length != 14) return false;
            cnpjtemporario = cnpj.Substring(0, 12);
            scale = 0;
            for (int i = 0; i < 12; i++)
                scale += int.Parse(cnpjtemporario[i].ToString()) * conj1[i];
            restante = (scale % 11);
            if (restante < 2) restante = 0;
            else restante = 11 - restante;
            tudo = restante.ToString();
            cnpjtemporario = cnpjtemporario + tudo;
            scale = 0;
            for (int i = 0; i < 13; i++)
                scale += int.Parse(cnpjtemporario[i].ToString()) * conj2[i];
            restante = (scale % 11);
            if (restante < 2) restante = 0;
            else restante = 11 - restante;
            tudo = tudo + restante.ToString();
            return cnpj.EndsWith(tudo);
        }

Ruby[editar | editar código-fonte]

  def validate_cnpj(cnpj)
    cnpj = cnpj.gsub(/[^0-9]/,"").scan(/./).map(&:to_i)
    dv = cnpj.last(2)
    r1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 1].zip(cnpj).map{|x,y| x*y}.sum % 11
    r2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 1].zip(cnpj).map{|x,y| x*y}.sum % 11
    r1 == (dv[0] == 0 ? 1 : 0) && r2 == (dv[1] == 0 ? 1 : 0)
  end

Visual FoxPro[editar | editar código-fonte]

PARAMETERS numerocnpj
cnpj = SUBSTR(numerocnpj,1,12)
diginformado = SUBSTR(numerocnpj,13,2)
soma = 0
d = 1
FOR i = 5 TO 2 STEP -1
	soma = soma + (i * VAL(SUBSTR(cnpj,d,1)))
	d = d + 1
	IF (i == 2 AND thisform.flagi = .F.)
		i = 10
		thisform.flagi = .T.
	ENDIF
ENDFOR
 
digito = IIF ((MOD(soma,11) < 2),0,(11 - MOD(soma,11)))
cnpj = cnpj + ALLTRIM(STR(digito))
thisform.flagi = .F.
&&--------------------------------------------
cnpj = SUBSTR(cnpj,1,13)
soma = 0
d = 1
FOR i = 6 TO 2 STEP -1
	soma = soma + (i * VAL(SUBSTR(cnpj,d,1)))
	d = d + 1
	IF (i == 2 AND thisform.flagi = .F.)
		i = 10
		thisform.flagi = .T.
	ENDIF
ENDFOR
 
digito = IIF ((MOD(soma,11) < 2),0,(11 - MOD(soma,11)))
cnpj = cnpj + ALLTRIM(STR(digito))
thisform.flagi = .F.
 
RETURN IIF((SUBSTR(cnpj,13,2) == diginformado),"CNPJ válido","CNPJ inválido")

Ver também[editar | editar código-fonte]

Wikcionário
O Wikcionário possui o verbete CNPJ.

Ligações externas[editar | editar código-fonte]