Top Qs
Linha do tempo
Chat
Contexto

Número de identificação fiscal

código que inicia pela designação da jurisdição (país), concatenado com o código local do tipo de pessoa (física ou jurídica) Da Wikipédia, a enciclopédia livre

Remove ads

O número de identificação fiscal (NIF) tem como finalidade identificar em Portugal uma entidade fiscal, contribuinte, por exemplo, em declarações de IRS ou outros impostos ou transações financeiras

É atribuído pela Autoridade Tributária e Aduaneira, organismo do Ministério das Finanças e da Administração Pública, no caso de pessoas singulares e pessoas colectivas não sujeitas a registo no Registo Nacional de Pessoas Colectivas (RNPC).

É atribuído pelo Registo Nacional de Pessoas Colectivas no caso de entidades sujeitas a registo.

Foi instituído pelo Decreto-Lei n.º 463/79, de 30 de Novembro. O Decreto-lei n.º 463/79 foi revogado a partir de 27 de Fevereiro de 2013 pelo Decreto-lei n.º 14/2013, de 28 de Janeiro, que procede à sistematização e harmonização da legislação referente ao Número de Identificação Fiscal.

Este número é ainda utilizado, dentro da União Europeia, para identificar as entidades económicas para efeitos de IVA (VAT identification Number).

Remove ads

Definição

Artigo 2.º do Decreto-lei n.º 14/2013, de 28 de Janeiro:

"O Número de Identificação Fiscal, abreviadamente designado por NIF, é um número sequencial destinado exclusivamente ao tratamento de informação de índole fiscal e aduaneira, devendo ser gerado de forma automática em conformidade com as disposições constantes do presente diploma."

NIF das Empresas

O NIF das Empresas é o número fiscal utilizado em Portugal para identificar uma entidade em transacções financeiras e pagamento de impostos (IRC). O termo usado geralmente é NIF (Número de Identificação Fiscal), no entanto o termo correcto é NIPC (Número de Identificação de Pessoa Colectiva).

NIF e Senha das Finanças em Portugal

No contexto português, o NIF (Número de Identificação Fiscal) é um identificador essencial para cidadãos e empresas nas suas relações fiscais. É crucial ter cuidado ao lidar com a senha das Finanças, associada ao NIF. Os cidadãos devem manter um controlo direto sobre as suas credenciais fiscais e ser cautelosos ao partilhar tais informações.

Constituição e interpretação

Resumir
Perspectiva

É constituído por nove dígitos, sendo os oito primeiros sequenciais e o último um dígito de controlo.

O NIF pode pertencer a uma de várias gamas de números, definidas pelos dígitos iniciais, com as seguintes interpretações[1]:

  • 1 a 3: Pessoa singular, a gama 3 começou a ser atribuída em junho de 2019;[2]
  • 45: Pessoa singular. Os algarismos iniciais "45" correspondem aos cidadãos não residentes que apenas obtenham em território português rendimentos sujeitos a retenção na fonte a título definitivo;[3]
  • 5: Pessoa colectiva obrigada a registo no Registo Nacional de Pessoas Colectivas;[4]
  • 6: Organismo da Administração Pública Central, Regional ou Local;
  • 70, 74 e 75: Herança Indivisa, em que o autor da sucessão não era empresário individual, ou Herança Indivisa em que o cônjuge sobrevivente tem rendimentos comerciais;
  • 71: Não residentes colectivos sujeitos a retenção na fonte a título definitivo;
  • 72: Fundos de investimento;
  • 77: Atribuição Oficiosa de NIF de sujeito passivo (entidades que não requerem NIF junto do RNPC);
  • 78: Atribuição oficiosa a não residentes abrangidos pelo processo VAT REFUND;
  • 79: Regime excepcional - Expo 98;
  • 8: "empresário em nome individual" (actualmente obsoleto, já não é utilizado nem é válido);
  • 90 e 91: Condomínios, Sociedade Irregulares, Heranças Indivisas cujo autor da sucessão era empresário individual;
  • 98: Não residentes sem estabelecimento estável;
  • 99: Sociedades civis sem personalidade jurídica.

O nono e último dígito é o dígito de controlo. É calculado utilizando o algoritmo módulo 11.

Remove ads

Obter dígito de controlo

Resumir
Perspectiva

O NIF tem 9 dígitos, sendo o último o digito de controlo. Para ser calculado o digito de controlo:

  1. Multiplique o 8.º dígito por 2, o 7.º dígito por 3, o 6.º dígito por 4, o 5.º dígito por 5, o 4.º dígito por 6, o 3.º dígito por 7, o 2.º dígito por 8 e o 1.º dígito por 9;
  2. Some os resultados;
  3. Calcule o resto da divisão do número por 11;
  4. Se o resto for 0 (zero) ou 1 (um) o dígito de controlo será 0 (zero);
  5. Se for outro qualquer algarismo X, o dígito de controlo será o resultado da subtracção 11 - X.

Exemplo de validação em Python

import doctest

DIGITOS_NIF = 9
DIGITOS_CONTROLO = 8


def calcular_digito_controlo(digitos: str) -> str:
    """Calcula o digito de controle de um NIF Ex. 99999999[0]
    >>> calcular_digito_controlo('99999999')
    '0'
    >>> calcular_digito_controlo('74089837')
    '0'
    >>> calcular_digito_controlo('28702400')
    '8'
    """
    if not digitos.isdigit():
        raise ValueError("Nem todos os caracteres são digitos")
    if not len(digitos) == DIGITOS_CONTROLO:
        raise ValueError(f"Número de digitos diferente de {DIGITOS_CONTROLO}")

    soma = (
        int(digitos[0]) * 9
        + int(digitos[1]) * 8
        + int(digitos[2]) * 7
        + int(digitos[3]) * 6
        + int(digitos[4]) * 5
        + int(digitos[5]) * 4
        + int(digitos[6]) * 3
        + int(digitos[7]) * 2
    )
    resto = soma % 11
    if resto == 0 or resto == 1:
        return "0"
    return str(11 - resto)


def valida_nif(nif: str) -> bool:
    """Validação do número de identificação fiscal
    >>> valida_nif('999999990')
    True
    >>> valida_nif('999999999')
    False
    >>> valida_nif('501442600')
    True
    """
    if not nif.isdigit() or len(nif) != DIGITOS_NIF:
        return False
    return nif[-1] == calcular_digito_controlo(nif[:DIGITOS_CONTROLO])


if __name__ == "__main__":
    doctest.testmod()

Exemplo de validação em JavaScript

function validateNIF(value) {
    const nif = typeof value === 'string' ? value : value.toString();
    if (nif.length !== 9) return false;
    if (
        !validationSets.one.includes(nif.substring(0, 1)) &&
        !validationSets.two.includes(nif.substring(0, 2))
    )
        return false;
    const nifNumbers = nif.split("").map((c) => Number.parseInt(c));
    const total =
        nifNumbers[0] * 9 +
        nifNumbers[1] * 8 +
        nifNumbers[2] * 7 +
        nifNumbers[3] * 6 +
        nifNumbers[4] * 5 +
        nifNumbers[5] * 4 +
        nifNumbers[6] * 3 +
        nifNumbers[7] * 2;
    const modulo11 = Number(total) % 11;
    const checkDigit = modulo11 < 2 ? 0 : 11 - modulo11;
    return checkDigit === Number(nif[8]);
}

Exemplo de validação em PHP

public static function validateNIF($nif) {
    $nif = trim($nif);
    $nif_split = str_split($nif);
    $nif_primeiros_digito = array(1, 2, 3, 5, 6, 7, 8, 9);
    if (is_numeric($nif) && strlen($nif) == 9 && in_array($nif_split[0], $nif_primeiros_digito)) {
        $check_digit = 0;
        for ($i = 0; $i < 8; $i++) {
            $check_digit += $nif_split[$i] * (10 - $i - 1);
        }
        $check_digit = 11 - ($check_digit % 11);
        $check_digit = $check_digit >= 10 ? 0 : $check_digit;
        if ($check_digit == $nif_split[8]) {
            return true;
        }
    }
    return false;
}

Exemplo de validação em R

validateNIF <- function(nif) {
  if (!grepl("\\D", nif)) {
    mod11 <- strtoi(strsplit(nif,"")[[1]]) %*% c(9:2,0) %% 11
    checkDigit <- ifelse(mod11 == 0, 0, ifelse(mod11 == 1, 9, 11 - mod11))
    (substr(nif, 9, 9) == checkDigit)[1][1]
  }
  else FALSE
}

Exemplo de validação em Rust[5]

fn validate_nif(pnif: &str) -> bool {
    let mut nif = pnif.trim();
    if nif.chars().count() == 11 {
        if &nif[..2] == "PT" {
            nif = &nif[2..];
        } else {
            return false;
        }
    }
    if nif.chars().count() == 9 && nif.parse::<i64>().is_ok() {
        let mut total = 0 as i32;
        for n in 2..10 {
            let ss:String = nif.chars().skip(9-n).take(1).collect();
            total += ss.as_str().parse::<i32>().unwrap() * n as i32;
        }
        let modulo11 = total % 11;
        let check_digit = if modulo11 < 2 { 0 } else { 11 - modulo11};
        let s_check_digit:String = nif.chars().skip(8).take(1).collect();
        let p_check_digit = s_check_digit.as_str().parse::<i32>().unwrap();
        return check_digit == p_check_digit;
    }
    return false;
}

Exemplo de validação em Ruby (version 2.4+)

def valid?(nif)
  digits = nif.digits.reverse
  return false unless digits.size == 9
  mod11 = (0..7).sum { |n| digits[n]*(9-n) } % 11
  digits[8] == (mod11 < 2 ? 0 : 11 - mod11)
end

Exemplo de validação em Go [6]

func IsValidNif(nif string) bool {
	// validate length
	if len(nif) != 9 {
		return false
	}

	// check if all characters are numbers
	for _, char := range nif {
		if char < '0' || char > '9' {
			return false
		}
	}

	// validate prefixes
	if !func() bool {
		if strings.ContainsAny(nif[:1], "123568") {
			return true
		}

		if _, ok := map[string]bool{
			"45": true, "70": true, "71": true, "72": true, "74": true,
			"75": true, "77": true, "78": true, "79": true, "90": true,
			"91": true, "98": true, "99": true}[nif[:2]]; ok {
			return true
		}

		return false
	}() {
		return false
	}

	// calculate check-digit
	sum := 0
	for i, char := range nif[:8] {
		v, err := strconv.Atoi(string(char))
		if err != nil {
			return false
		}
		sum += v * (9 - i)
	}
	rmd := sum % 11
	ckd := 0
	switch rmd {
	case 0, 1:
		ckd = 0
	default:
		ckd = 11 - rmd
	}
	// compare the provided check digit with the calculated one
	compare, err := strconv.Atoi(string(nif[8]))
	if err != nil {
		return false
	}
	return compare == ckd
}

Exemplo de validação em TypeScript

function validateNIF(nif: string) {
    const validationSets = {
      one: ['1', '2', '3', '5', '6', '8'],
      two: ['45', '70', '71', '72', '74', '75', '77', '79', '90', '91', '98', '99']
    };
    if (nif.length !== 9) return false;
    if (!validationSets.one.includes(nif.substring(0, 1)) && !validationSets.two.includes(nif.substring(0, 2))) return false;
    const nifNumbers = nif.split('').map(c => Number.parseInt(c))
    const total = nifNumbers[0] * 9 + 
      nifNumbers[1] * 8 + 
      nifNumbers[2] * 7 + 
      nifNumbers[3] * 6 + 
      nifNumbers[4] * 5 + 
      nifNumbers[5] * 4 +
      nifNumbers[6] * 3 +
      nifNumbers[7] * 2;
    const modulo11 = (Number(total) % 11);
    const checkDigit = modulo11 < 2 ? 0 : 11 - modulo11;
    return checkDigit === Number(nif[8]);
}

Exemplo de validação em Java[7]

public static boolean PT(String number) {
	final int max=9;
	//check if is numeric and has 9 numbers
	if (!number.matches("[0-9]+") || number.length()!=max) return false;
	int checkSum=0;
	//calculate checkSum
	for (int i=0; i<max-1; i++){
		checkSum+=(number.charAt(i)-'0')*(max-i);
	}
	int checkDigit=11-(checkSum % 11);
	//if checkDigit is higher than 9 set it to zero
	if (checkDigit>9) checkDigit=0;
	//compare checkDigit with the last number of NIF
	return checkDigit==number.charAt(max-1)-'0';
}

Exemplo de validação em APL

nifvalido  {(=1):'Não é numérico'⋄(10¯1)9:'Não tem 9 dígitos'C11-11|+/(¯110-⍳9)×(¯110¯1)⋄D810¯1t(((C10)(D=0))((C<10)(D=C))):'NIF válido'⋄(~t):'NIF inválido'}
⍝ monadic dfn em APL que aceita NIF como input, valida se é numérico, valida se tem 9 dígitos. Se numérico com 9 dígitos, devolve se é válido ou inválido

Exemplo de validação em C#[8]

public static bool Nif(string nifNumber)
{
    int tamanhoNumero = 9; // Tamanho do número NIF

    string filteredNumber = Regex.Match(nifNumber, @"[0-9]+").Value; // extrair Número

    if (filteredNumber.Length != tamanhoNumero || int.Parse(filteredNumber[0].ToString()) == 0) { return false; } // Verificar Tamanho, e zero no inicio

    int calculoCheckSum = 0;
    // Calcular check sum
    for (int i = 0; i < tamanhoNumero - 1; i++)
    {
        calculoCheckSum += (int.Parse(filteredNumber[i].ToString()))*(tamanhoNumero - i);
    }

    int digitoVerificacao = 11-(calculoCheckSum % 11);
           
    if (digitoVerificacao > 9) { digitoVerificacao = 0; }
    // retornar validação
    return digitoVerificacao == int.Parse(filteredNumber[tamanhoNumero - 1].ToString());

}
Remove ads

Noutros países

Em Itália, o número de contribuinte é calculado com base no nome, ano de nascimento e outros detalhes particulares, de forma a poder ser determinado pelo próprio contribuinte, sem ser necessário esperar pela emissão do documento oficial.

No Brasil, existem os equivalentes ao NIF cadastro de pessoas físicas (CPF), utilizado para indivíduos, e o equivalente ao NIPC cadastro nacional da pessoa jurídica (CNPJ) para empresas. Ambos são atribuídos pela Receita Federal do Brasil.

Remove ads

Referências

  1. «Atribuição de Nova Gama de NIF a Pessoas Singulares.». info.portaldasfinancas.gov.pt. Consultado em 7 de agosto de 2019
  2. PORTUGAL Decreto-lei n.º 14/2013, de 28 de janeiro, artigo 4.º.
  3. PORTUGAL Decreto-lei 14/2013, de 28 de janeiro, n.º 1 do artigo 11.º.
  4. O algoritmo em Go foi retirado do package nifptvalidator
  5. No GitHub: VatNumber
Ícone de esboço Este artigo sobre economia é um esboço. Você pode ajudar a Wikipédia expandindo-o.
Remove ads
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads