Validação de NIF em C++

Algoritmo de validação de um NIF em C++

#include <iostream>

int nif, n, nif_d[8], resultado, resto, dig_control;

int main(){
  printf("Insira o seu NIF \n");
  scanf("%d",&nif);

  //Separação de dígitos num array
  for(n=9;n>=1;n--){
    nif_d[n]=nif%10;
    nif/=10;
  }

  //Verificar se o NIF possuí 9 dígitos e consequente verificação dos primeiros dígitos
  if((nif<=999999999||nif>99999999)&&((nif_d[1]==1||nif_d[1]==2||nif_d[1]==3)||(nif_d[1]==4&&nif_d[2]==5)||(nif_d[1]==5)||(nif_d[1]==6)||(nif_d[1]==7&&nif_d[2]==0)||(nif_d[1]==7&&nif_d[2]==4)||(nif_d[1]==7&&nif_d[2]==5)||(nif_d[1]==7&&nif_d[2]==1)||(nif_d[1]==7&&nif_d[2]==2)||(nif_d[1]==7&&nif_d[2]==7)||(nif_d[1]==7&&nif_d[2]==8)||(nif_d[1]==7&&nif_d[2]==9)||(nif_d[1]==8)||(nif_d[1]==9&&nif_d[2]==0)||(nif_d[1]==9&&nif_d[2]==1)||(nif_d[1]==9&&nif_d[2]==8)||(nif_d[1]==9&&nif_d[2]==9))){

    //Calcular o valor da soma da multiplicação dos dígitos
    resultado=nif_d[1]*9+nif_d[2]*8+nif_d[3]*7+nif_d[4]*6+nif_d[5]*5+nif_d[6]*4+nif_d[7]*3+nif_d[8]*2+nif_d[9];

    //Calcular o valor do resto
    resto=resultado%11;

    //Caso o resto seja 0 ou 1 o NIF é válido
    if(resto==0||resto==1){
      printf("O NIF é válido\n");
    }else{
      dig_control=11-resto;

      //Caso o resto seja diferente de 0 ou 1 verificar através do dígito de controlo
      if(dig_control==nif_d[9]){
        printf("O NIF é válido\n");
      }else{
        printf("O NIF é inválido\n");
      }
    }
  }else{
    printf("O NIF é inválido\n");
  }

}

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.