using System; namespace GeradoresService { public static class CartaoCidadao { // Função estática para gerar o número de documento public static string Generate() { Random rand = new Random(); // Gerar o Número de Identificação Civil (8 dígitos) string numeroIdentificacaoCivil = rand.Next(0, 100000000).ToString("D8"); // Gerar o Check Digit C int checkDigitC = CalcularCheckDigit(numeroIdentificacaoCivil); // Gerar a Versão (duas letras ou números aleatórios entre A-Z ou 0-9) string versao = GerarVersao(); // Gerar o Check Digit T (Número aleatório entre 0-9) int checkDigitT = rand.Next(0, 10); // T: Número aleatório por enquanto, conforme exemplo. // Montar o número completo do documento com o formato desejado string numeroDocumento = $"{numeroIdentificacaoCivil} {checkDigitC} {versao}{checkDigitT}"; return numeroDocumento; } // Função para calcular o Check Digit C com base no Número de Identificação Civil private static int CalcularCheckDigit(string numeroIdentificacaoCivil) { int soma = 0; bool segundoElemento = false; // Percorrer o número da direita para a esquerda for (int i = numeroIdentificacaoCivil.Length - 1; i >= 0; i--) { int valor = numeroIdentificacaoCivil[i] - '0'; // Converte o char para inteiro // Multiplicar cada segundo número por 2 if (segundoElemento) { valor *= 2; if (valor >= 10) valor -= 9; // Subtrair 9 se o valor for maior ou igual a 10 } soma += valor; segundoElemento = !segundoElemento; } // Retornar o check digit (resto da soma por 10) return soma % 10; } // Função para gerar a versão (letras ou números) private static string GerarVersao() { Random rand = new Random(); string versao = ""; for (int i = 0; i < 2; i++) // Gerar duas letras/números { int numeroAleatorio = rand.Next(0, 36); // 26 letras + 10 números if (numeroAleatorio < 26) { // Gerar uma letra de A a Z versao += (char)('A' + numeroAleatorio); } else { // Gerar um número de 0 a 9 versao += (char)('0' + (numeroAleatorio - 26)); } } return versao; } } }