using System.Security.Cryptography;
using System.Globalization;
public static void Main()
var transaction = new TransactionEntity();
Console.WriteLine("Digite o cnpj (apenas os números)");
transaction.Cnpj = Console.ReadLine();
transaction.CreatedAt = DateTime.UtcNow;
Console.WriteLine("Digite o AdministrativeCode");
transaction.AdministrativeCode = Console.ReadLine();
transaction.Acquirer = "Cappta";
transaction.OperationId = Operation.Authorization;
var uniqueIdentifier = GenerateTransactionUniqueIdentifier(transaction);
Console.WriteLine("UniqueIdentifier: " + uniqueIdentifier);
var checkSum = CalculateCheckSum(transaction);
Console.WriteLine("CheckSum: " + checkSum);
protected static string GenerateTransactionUniqueIdentifier(TransactionEntity transaction)
var paymentTruncatedDateTime = transaction.CreatedAt.AddHours(-3).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
var source = string.Concat(transaction.Cnpj, transaction.AdministrativeCode, paymentTruncatedDateTime);
var hashBytes = Sha1CryptoProvider.Encrypt(source);
return BitConverter.ToString(hashBytes).Replace("-", string.Empty);
protected static long CalculateCheckSum(TransactionEntity transaction)
if (transaction.OperationId == Operation.Reversal) { return 0; }
var dataToCalculate = string.Concat(
transaction.CreatedAt.ToString(),
transaction.TransactionOrigin,
transaction.AdministrativeCode,
var byteToCalculate = Encoding.ASCII.GetBytes(dataToCalculate);
var checksum = default(long);
foreach (var chData in byteToCalculate)
public class Sha1CryptoProvider
private static readonly SHA1 hashGenerator = SHA1.Create();
public static byte[] Encrypt(string contentToEncrypt)
var sourceBytes = Encoding.UTF8.GetBytes(contentToEncrypt);
return hashGenerator.ComputeHash(sourceBytes);
public class TransactionEntity
public string Cnpj { get; set; }
public DateTime CreatedAt { get; set; }
public string AdministrativeCode { get; set; }
public string UniqueIdentifier { get; set; }
public string TransactionOrigin { get; set; }
public string Acquirer { get; set; }
public Operation OperationId { get; set; }