using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GeradoresService { public class NISS { private static readonly Random random = new Random(); public static string Generate() { return GenerateNISS(); } private static string GenerateRandomDigits(int length) { string digits = "1"; for (int i = 0; i < length; i++) { digits += random.Next(0, 10); // Gera um dígito aleatório entre 0 e 9 } return digits; } public static string GenerateNISS() { // Gera 9 dígitos aleatórios string niss = GenerateRandomDigits(9); // Calcula o dígito de controlo int soma = 0; for (int i = 0; i < 10; i++) { int digito = int.Parse(niss[i].ToString()); soma += digito * (i + 1); } int resto = soma % 11; int digitoControlo = 11 - resto; // Verifica se o dígito de controlo está no intervalo [0, 9] if (digitoControlo == 10) { niss += "0"; } else if (digitoControlo == 11) { niss += "1"; } else { niss += digitoControlo.ToString(); } return niss; } public static bool Validate(string niss) { // Verifica se o NISS tem 11 dígitos if (niss.Length != 11) return false; // Verifica se é um número foreach (char c in niss) { if (!char.IsDigit(c)) return false; } // Calcula o dígito de controlo int soma = 0; for (int i = 0; i < 10; i++) { int digito = int.Parse(niss[i].ToString()); soma += digito * (i + 1); } int resto = soma % 11; int digitoControlo = 11 - resto; // Verifica o último dígito do NISS int ultimoDigito = int.Parse(niss[10].ToString()); if (digitoControlo == 10 && ultimoDigito != 0) return false; if (digitoControlo == 11 && ultimoDigito != 0 && ultimoDigito != 1) return false; if (digitoControlo != ultimoDigito) return false; return true; } } }