Files
Geradores/GeradoresService/CC.cs
Marco Santos 11e532ac9a New Layout
2025-07-13 21:43:37 +01:00

82 lines
2.7 KiB
C#

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;
}
}
}