Discussão:Cadastro Nacional da Pessoa Jurídica
Adicionar tópicoAspeto
Último comentário: 10 de junho de 2014 de Capmo no tópico Remoção dos códigos-fonte
Esta é a página de discussão de Cadastro Nacional da Pessoa Jurídica, destinada ao debate sobre melhorias e tarefas relacionadas ao artigo. Não é um fórum para discussão sem relação com o artigo. | |||
---|---|---|---|
|
Remoção dos códigos-fonte
[editar código-fonte]Removi do artigo os códigos-fonte, deixando apenas o pseudocódigo, como estabelece WP:MANUAL. Vou deixá-los temporariamente aqui na discussão. —capmo (hã?) 03h31min de 10 de junho de 2014 (UTC) Obs.: o trecho seguinte está "compactado" de modo a despoluir visualmente o contexto da página toda.
Delphi
[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 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 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;
}
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 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 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")