Skip to content

Instantly share code, notes, and snippets.

@alyleite
Created May 2, 2024 12:52
Show Gist options
  • Save alyleite/3f7e0ca84aa6cbb3c7be636d94b29573 to your computer and use it in GitHub Desktop.
Save alyleite/3f7e0ca84aa6cbb3c7be636d94b29573 to your computer and use it in GitHub Desktop.
Gerar TxId único para cada CPF ou CNPJ (Código não testado)
using System;
using System.Security.Cryptography;
using System.Text;
public class TxIdGenerator
{
public static void Main(string[] args)
{
string cpf = "12345678901"; // Exemplo de CPF
bool isDynamicQR = true; // Indica se o QR Code é dinâmico
string txId = TxIdGenerator.GenerateTxId(cpf, isDynamicQR);
Console.WriteLine("TxId gerado: " + txId);
}
// Método para gerar um txId único
public static string GenerateTxId(string cpfCnpj, bool isDynamicQR)
{
// Concatenar o CPF/CNPJ com um timestamp para garantir a unicidade
string uniqueString = cpfCnpj + DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
// Calcular o hash SHA-256 da string concatenada
byte[] bytes = Encoding.UTF8.GetBytes(uniqueString);
byte[] hashBytes;
using (SHA256 sha256 = SHA256.Create())
{
hashBytes = sha256.ComputeHash(bytes);
}
// Converter o hash para uma string hexadecimal
string hexString = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
// Determinar o tamanho do txId com base no tipo de QR Code
int minLength = isDynamicQR ? 25 : 32; // QR Code dinâmico: mínimo 25 caracteres, QR Code estático: máximo 32 caracteres
int length = Math.Max(minLength, Math.Min(hexString.Length, 32)); // Limitar a 32 caracteres no máximo
// Retornar os caracteres necessários
return hexString.Substring(0, length);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment