Created
May 2, 2024 12:52
-
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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