Bandeira Portugal Portugal Direct

Validação Técnica do NIF Português

O NIF português utiliza o algoritmo módulo 11 com pesos decrescentes para validação. Este guia técnico explica o algoritmo em detalhe, com exemplos e implementações em código.

Estrutura do NIF

O NIF é composto por 9 dígitos:

Algoritmo Módulo 11

Passo 1: Aplicar Pesos

Multiplique cada um dos primeiros 8 dígitos pelos pesos 9, 8, 7, 6, 5, 4, 3, 2:

Posição12345678
Peso98765432

Passo 2: Somar Resultados

Some todos os produtos obtidos.

Passo 3: Calcular Resto

Calcule: resto = soma mod 11

Passo 4: Obter Dígito de Controlo

Calcule: controlo = 11 - resto

Se controlo for 10 ou 11, o dígito de controlo é 0.

Exemplo: NIF 213456789

DígitoPesoProduto
2918
188
3721
4624
5525
6424
7321
8216
Soma157

Resto: 157 mod 11 = 3

Dígito de controlo: 11 - 3 = 8

O dígito fornecido (9) ≠ calculado (8), portanto NIF inválido.

Implementação em JavaScript

function validarNIF(nif) { nif = nif.replace(/\s/g, ''); if (!/^\d{9}$/.test(nif)) return false; const pesos = [9, 8, 7, 6, 5, 4, 3, 2]; let soma = 0; for (let i = 0; i < 8; i++) { soma += parseInt(nif[i]) * pesos[i]; } let controlo = 11 - (soma % 11); if (controlo >= 10) controlo = 0; return controlo === parseInt(nif[8]); }

Implementação em Python

def validar_nif(nif): nif = nif.replace(" ", "") if not nif.isdigit() or len(nif) != 9: return False pesos = [9, 8, 7, 6, 5, 4, 3, 2] soma = sum(int(nif[i]) * pesos[i] for i in range(8)) controlo = 11 - (soma % 11) if controlo >= 10: controlo = 0 return controlo == int(nif[8])
Importante: A validação de formato apenas confirma que o número está matematicamente correto. Não garante que o NIF existe ou está ativo. Para verificações oficiais, consulte o Portal das Finanças.

← Validar NIF Online Guia NIF →