using System.Net.NetworkInformation; namespace GeradoresService { public class NIF { public static string Generate(string? type) { return GenerateRandomNIF(type); } public static string GenerateRandomNIF(string? nifType) { var firstDigitValidate = new char[] { '1', '2','3', '5', '6', '8', '9' }; Random rnd = new Random(); char firstDigit; if (string.IsNullOrEmpty(nifType)) { // Gera o primeiro dígito aleatório dentro dos válidos int firstDigitIndex = rnd.Next(0, 6); // Escolhe um índice de 0 a 5 firstDigit = firstDigitValidate[firstDigitIndex]; } else { if (firstDigitValidate.Contains(nifType[0])){ firstDigit = nifType[0]; }else { int firstDigitIndex = rnd.Next(0, 6); // Escolhe um índice de 0 a 5 firstDigit = firstDigitValidate[firstDigitIndex]; } } // Gera os próximos 7 dígitos aleatórios string nextDigits = ""; for (int i = 0; i < 7; i++) { nextDigits += rnd.Next(0, 10); // Gera um dígito aleatório de 0 a 9 } // Calcula o dígito de controlo int checkDigit = (firstDigit - '0') * 9; for (int i = 2; i <= 8; i++) { checkDigit += (nextDigits[i - 2] - '0') * (10 - i); } checkDigit = 11 - (checkDigit % 11); if (checkDigit >= 10) checkDigit = 0; // Concatena os dígitos gerados e o dígito de controlo string randomNIF = firstDigit + nextDigits + checkDigit; return randomNIF; } public static bool Validate(string nif) { // Verificar se o NIF tem 9 dígitos if (nif.Length != 9) { return false; } // Converter o NIF para um array de dígitos int[] digitos = new int[9]; for (int i = 0; i < 9; i++) { if (!int.TryParse(nif[i].ToString(), out digitos[i])) { return false; // Se algum caractere não for um dígito, o NIF é inválido } } // Calcular o dígito de controlo int soma = 0; for (int i = 0; i < 8; i++) { soma += digitos[i] * (9 - i); } int resto = soma % 11; int digitoControlo = resto <= 1 ? 0 : 11 - resto; // Verificar se o dígito de controlo coincide com o último dígito do NIF return digitoControlo == digitos[8]; } } }