public static void Main()
DateTime dtVencimento = new DateTime(2025, 2, 23);
double fatorVencimentoLinhaDigitavel = 9962;
DateTime dtReferencia = new DateTime(1997, 10, 07);
double fatorCalculadoPeloVencimento = dtVencimento.Subtract(dtReferencia).TotalDays;
string dtVencimentoCalculado = dtReferencia.AddDays(fatorVencimentoLinhaDigitavel).ToString("dd/MM/yyyy");
if (fatorCalculadoPeloVencimento > 9999)
dtReferencia = new DateTime(2025, 02, 22);
fatorCalculadoPeloVencimento = dtVencimento.Subtract(dtReferencia).TotalDays + 1000;
dtVencimentoCalculado += " e/ou " + dtReferencia.AddDays(fatorVencimentoLinhaDigitavel - 1000).ToString("dd/MM/yyyy");
if (fatorVencimentoLinhaDigitavel != fatorCalculadoPeloVencimento)
Console.WriteLine("Vencimento informado está errado");
Console.WriteLine("Vencimento informado na tela é: " + dtVencimento.ToString("dd/MM/yyyy") + ", mas pela a linha digitavel do boleto, o vencimento deveria ser deveria ser: " + dtVencimentoCalculado);
Console.WriteLine("Vencimento OK");