/// <summary> /// Generates a random valid nif / tax number /// </summary> /// <returns></returns> public static string GenerateNIF() { NIFType randdomType = NIFType.PessoaSingular; var values = Enum.GetValues(typeof(NIFType)); int rPosition = rand.Next(0, values.Length - 1); randdomType = (NIFType)values.GetValue(rPosition); return(GenerateNIF(randdomType)); }
/// <summary> /// Generates a random valid nif / tax number of a specific type /// </summary> /// <param name="t">the type of nif to be generated</param> /// <returns></returns> public static string GenerateNIF(NIFType t) { string number = string.Empty; string checkDigit = string.Empty; // RANDOM NUMBER GENERATION switch (t) { case NIFType.PessoaSingular: number = "1" + StringGenerator.GetNumeric(7); break; case NIFType.PessoaSingularEstrangeiro: number = "45" + StringGenerator.GetNumeric(6); break; case NIFType.PessoaColectiva: number = "5" + StringGenerator.GetNumeric(7); break; case NIFType.AdministracaoPublica: number = "6" + StringGenerator.GetNumeric(7); break; case NIFType.HerancaIndivisa: number = "70" + StringGenerator.GetNumeric(6); break; case NIFType.NaoResidentesColectivos: number = "71" + StringGenerator.GetNumeric(6); break; case NIFType.FundosDeInvestimento: number = "72" + StringGenerator.GetNumeric(6); break; case NIFType.AtribuicaoOficiosaSujeitoPassivo: number = "77" + StringGenerator.GetNumeric(6); break; case NIFType.AtribuicaoOficiosaNaoResidentes: number = "78" + StringGenerator.GetNumeric(6); break; case NIFType.RegimeExcepcional: number = "79" + StringGenerator.GetNumeric(6); break; case NIFType.EmpresarioEmNomeIndividual: number = "8" + StringGenerator.GetNumeric(7); break; case NIFType.Condominios: number = "90" + StringGenerator.GetNumeric(6); break; case NIFType.NaoResidentes: number = "98" + StringGenerator.GetNumeric(6); break; case NIFType.SemPersonalidadeJuridica: number = "99" + StringGenerator.GetNumeric(6); break; default: number = "1" + StringGenerator.GetNumeric(7); break; } // CHECK DIGIT byte[] multiplyValues = new byte[] { 9, 8, 7, 6, 5, 4, 3, 2 }; int Total = 0; for (int i = 0; i < number.Length; i++) { byte b = byte.Parse(number[i].ToString()); int multiplyResult = b * multiplyValues[i]; Total += multiplyResult; } int resto = Total % 11; if (resto == 0 || resto == 1) { checkDigit = "0"; } else { checkDigit = (11 - resto).ToString(); } return($"{number}{checkDigit}"); }