Como validar um NIF no Excel

Validar um NIF no Excel é uma tarefa que pode ser feita através de formulas ou mais simples ainda, através de uma função em VBA.

Para validar um nif o algoritmo é bastante simples, como sabem o NIF é composto por 9 dígitos, sendo o último um digito de controlo, é este digito que iremos calcular para verificar se o nif está correcto.

Antes de procedermos ao cálculo do digito de controlo, temos de apurar algumas condições, uma bastante importante tem a ver com o 1º digito, este terá que ser válido, o primeiro dígito do NIF tem a ver com o tipo de entidade que o possui, que pode ser uma das seguintes:

  • NIF e Número de Contribuinte – Número de Identificação Fiscal
    • 1 – pessoa singular
    • 2 – pessoa singular
  • NIPC – Número de Identificação de Pessoa Colectiva
    • 5 (pessoa colectiva),
    • 6 (pessoa colectiva pública),
    • 8 (empresário em nome individual),
    • 9 (pessoa colectiva irregular ou número provisório).

Passado com sucesso esta condição, podemos começar a calcular o digito de controle.

Para calcular o digito de controlo iremos multiplicar individualmente e por ordem os restantes 8 algarismos, fazendo-o da seguinte forma:

O 1.º digito multiplicamos por 9, o 2.º dígito por 8, 3.º dígito por 7, 4.º dígito por 6, 5.º dígito por 5, 6.º dígito por 4, 7.º dígito por 3 e o 8.º dígito por 2.

Iremos somar todos os resultados da operação anterior.

Com o resultado da soma anterior iremos dividir por 11 e aproveitar o resto dessa divisão. Se o resto for 0 ou 1, o dígito de controle será 0, caso seja outro algarismo, o dígito de controle será o resultado de 11 – resto.

Simples não?

Com validar um NIF no Excel

Irei colocar aqui duas funções de validação de NIF em que a primeira devolve uma mensagem conforme o resultado e a segunda simplesmente retorna verdadeiro ou falso conforme o NIF estiver correcto ou não.

Já sabe que estas funções terão que ser colocadas num modulo através do Editor do VBA (ALT+F11) no Workbook onde pretende utilizá-las.

Função que valida NIF e retorna uma mensagem do resultado.

Function VerificaNIFmsg(NIF As String) As String

        Dim i As Integer, CheckDigit As Integer
        
        'Resultado predefinido
        VerificaNIFmsg = ""
        
        If Len(NIF) = 0 Then Exit Function
        
        'Só passa com um comprimento de 9 carateres e se for numerico
        If Len(NIF) <> 9 Then
            VerificaNIFmsg = "Erro na introdução do NIF - Tamanho"
            Exit Function
        End If
       
        If IsNumeric(NIF) = False Then
            VerificaNIFmsg = "Erro na introdução do NIF - Formato"
            Exit Function
        End If
       
        'verifica se o 1º digito é válido dentro dos possiveis inicios de numeros de contribuinte
        If InStr("125689", Mid(NIF, 1, 1)) = 0 Then Exit Function
        'Inicio do Calculo do CheckDigit
        CheckDigit = 0
        ' Multiplicação e soma do respectivo resultado
        For i = 1 To 8
            CheckDigit = CheckDigit + (Mid(NIF, i, 1) * (10 - i))
        Next i
        
        'Achar o resto da divisão entre a soma anterior e 11
         CheckDigit = CheckDigit Mod 11
            
        'Fase final da verificação do CheckDigit
        Select Case CheckDigit
                Case 0, 1
                    CheckDigit = 0
                Case Else
                CheckDigit = 11 - CheckDigit
        End Select
        
        'Confrontar o resultado do checkdigit com o último numero do NIF dado
        If (CheckDigit = Right(NIF, 1)) Then
            VerificaNIFmsg = "NIF OK"
        Else
            VerificaNIFmsg = "NIF Errado"
        End If
    
End Function

 

Função que valida NIF e retorna verdadeiro se o NIF estiver correcto ou falso para incorrecto.

Function VerificaNIF(NIF As String) As Boolean

        Dim i As Integer, CheckDigit As Integer
        
        'Resultado predefinido
        VerificaNIF = False
        
        'Sem NIF não há nada para calcular
        If Len(NIF) = 0 Then Exit Function
        
       'Só passa com um comprimento de 9 carateres e se for numerico
        If Len(NIF) <> 9 Or IsNumeric(NIF) = False Then Exit Function
       
       'Verifica se o 1º digito é válido dentro dos possiveis inicios de numeros de contribuinte
        If InStr("125689", Mid(NIF, 1, 1)) = 0 Then Exit Function
       'Inicio do Calculo do CheckDigit
        CheckDigit = 0
      ' Multiplicação e soma do respectivo resultado
        For i = 1 To 8
            CheckDigit = CheckDigit + (Mid(NIF, i, 1) * (10 - i))
        Next i
        
        'Achar o resto da divisão entre a soma anterior e 11
         CheckDigit = CheckDigit Mod 11
            
       'Fase final da verificação do CheckDigit
        Select Case CheckDigit
              'caso seja 0 ou 1
                Case 0, 1
                    CheckDigit = 0
                Case Else
                CheckDigit = 11 - CheckDigit
        End Select
        
        'Confrontar o resultado do checkdigit com o último numero do NIF dado
        If (CheckDigit = Right(NIF, 1)) Then VerificaNIF = True
   
End Function

 

Exemplo das duas funções em acção

 

Deixe um comentário