Algoritmo de validação de um NIF em C++
#include <iostream>
int nif, n, nif_d[8], resto, dig_controlo, verificacao;
int resultado=0;
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;
}
//Atribui o último dígito à variável verificacao
verificacao = nif_d[9];
//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
for(n=9;n>=2;n--){
resultado+=nif_d[10-n]*n;
}
//Calcular o valor do resto
resto=resultado%11;
//Cálculo do dígito de controlo
if(resto<2){
dig_controlo=0;
}else{
dig_controlo=11-resto;
}
//Verificação com o dígito de controlo
if(dig_controlo==verificacao){
printf("O NIF é válido\n");
}else{
printf("O NIF é inválido\n");
}
}else{
printf("O NIF é inválido\n");
}
}
Gostei muito meu professor Cesário Garcia.