82 lines
2.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|