/// <summary> /// A linha digitável será composta por cinco campos: /// 1º campo /// composto pelo código de Banco, código da moeda, as cinco primeiras posições do campo /// livre e o dígito verificador deste campo; /// 2º campo /// composto pelas posições 6ª a 15ª do campo livre e o dígito verificador deste campo; /// 3º campo /// composto pelas posições 16ª a 25ª do campo livre e o dígito verificador deste campo; /// 4º campo /// composto pelo dígito verificador do código de barras, ou seja, a 5ª posição do código de /// barras; /// 5º campo /// Composto pelo fator de vencimento com 4(quatro) caracteres e o valor do documento com 10(dez) caracteres, sem separadores e sem edição. /// /// </summary> public override void FormataLinhaDigitavel(Boleto boleto) { //BBBMC.CCCCD1 CCCCC.CCCCCD2 CCCCC.CCCCCD3 D4 FFFFVVVVVVVVVV #region Campo 1 string Grupo1 = string.Empty; string BBB = boleto.CodigoBarra.Codigo.Substring(0, 3); string M = boleto.CodigoBarra.Codigo.Substring(3, 1); string CCCCC = boleto.CodigoBarra.Codigo.Substring(19, 5); string D1 = Banco_Unibanco.Mod10(BBB + M + CCCCC).ToString(); Grupo1 = string.Format("{0}{1}{2}.{3}{4} ", BBB, M, CCCCC.Substring(0, 1), CCCCC.Substring(1, 4), D1); #endregion Campo 1 #region Campo 2 string Grupo2 = string.Empty; string CCCCCCCCCC2 = boleto.CodigoBarra.Codigo.Substring(24, 10); string D2 = Banco_Unibanco.Mod10(CCCCCCCCCC2).ToString(); Grupo2 = string.Format("{0}.{1}{2} ", CCCCCCCCCC2.Substring(0, 5), CCCCCCCCCC2.Substring(5, 5), D2); #endregion Campo 2 #region Campo 3 string Grupo3 = string.Empty; string CCCCCCCCCC3 = boleto.CodigoBarra.Codigo.Substring(34, 10); string D3 = Banco_Unibanco.Mod10(CCCCCCCCCC3).ToString(); Grupo3 = string.Format("{0}.{1}{2} ", CCCCCCCCCC3.Substring(0, 5), CCCCCCCCCC3.Substring(5, 5), D3); #endregion Campo 3 #region Campo 4 string Grupo4 = string.Empty; string D4 = _dacBoleto.ToString(); Grupo4 = string.Format("{0} ", D4); #endregion Campo 4 #region Campo 5 string Grupo5 = string.Empty; long FFFF = FatorVencimento(boleto); string VVVVVVVVVV = boleto.ValorBoleto.ToString("f").Replace(",", "").Replace(".", ""); VVVVVVVVVV = Utils.FormatCode(VVVVVVVVVV, 10); if (Utils.ToInt64(VVVVVVVVVV) == 0) { VVVVVVVVVV = "000"; } Grupo5 = string.Format("{0}{1}", FFFF, VVVVVVVVVV); #endregion Campo 5 boleto.CodigoBarra.LinhaDigitavel = Grupo1 + Grupo2 + Grupo3 + Grupo4 + Grupo5; }
public override void ValidaBoleto(Boleto boleto) { //Verifica se o nosso número é válido //Verifica se o tamanho para o NossoNumero são 12 dígitos if (Utils.ToString(boleto.NossoNumero) == string.Empty) { throw new NotImplementedException("Nosso número inválido"); } else if (Convert.ToInt32(boleto.NossoNumero).ToString().Length > 14) { throw new NotImplementedException("A quantidade de dígitos do nosso número são 14 números."); } else if (Convert.ToInt32(boleto.NossoNumero).ToString().Length < 14) { boleto.NossoNumero = Utils.FormatCode(boleto.NossoNumero, 14); } //Verificar se a Agencia esta correta if (boleto.Cedente.ContaBancaria.Agencia.Length > 4) { throw new NotImplementedException("A quantidade de dígitos da Agência " + boleto.Cedente.ContaBancaria.Agencia + ", são de 4 números."); } else if (boleto.Cedente.ContaBancaria.Agencia.Length < 4) { boleto.Cedente.ContaBancaria.Agencia = Utils.FormatCode(boleto.Cedente.ContaBancaria.Agencia, 4); } //Verificar se a Conta esta correta if (boleto.Cedente.ContaBancaria.Conta.Length > 6) { throw new NotImplementedException("A quantidade de dígitos da Conta " + boleto.Cedente.ContaBancaria.Conta + ", são de 6 números."); } else if (boleto.Cedente.ContaBancaria.Conta.Length < 6) { boleto.Cedente.ContaBancaria.Conta = Utils.FormatCode(boleto.Cedente.ContaBancaria.Conta, 6); } //Atribui o nome do banco ao local de pagamento boleto.LocalPagamento += Nome; //Verifica se data do processamento é valida //if (boleto.DataProcessamento.ToString("dd/MM/yyyy") == "01/01/0001") if (boleto.DataProcessamento == DateTime.MinValue) // diegomodolo ([email protected]) { boleto.DataProcessamento = DateTime.Now; } //Verifica se data do documento é valida //if (boleto.DataDocumento.ToString("dd/MM/yyyy") == "01/01/0001") if (boleto.DataDocumento == DateTime.MinValue) // diegomodolo ([email protected]) { boleto.DataDocumento = DateTime.Now; } if (boleto.Carteira != "20") { throw new NotImplementedException("Carteira não implementada: " + boleto.Carteira + ". Utilize a carteira 20."); } //Boleto.QuantidadeMoeda = 0; FormataCodigoBarra(boleto); FormataLinhaDigitavel(boleto); FormataNossoNumero(boleto); }
public override void FormataNossoNumero(Boleto boleto) { boleto.NossoNumero = string.Format("{0}{1}{2}", boleto.Categoria, boleto.NossoNumero, Utils.FormatCode(Codigo.ToString(), 3) + boleto.CodigoBarra.Chave.Substring(23, 2)); }
public override void FormataLinhaDigitavel(Boleto boleto) { string BBB = Utils.FormatCode(Codigo.ToString(), 3); int M = boleto.Moeda; string CCCCC1 = boleto.CodigoBarra.Chave.Substring(0, 5); int D1 = 0; string CCCCCCCCCC2 = boleto.CodigoBarra.Chave.Substring(5, 10); int D2 = 0; string CCCCCCCCCC3 = boleto.CodigoBarra.Chave.Substring(15, 10); int D3 = 0; D1 = Mod10(BBB + M + CCCCC1); string Grupo1 = string.Format("{0}.{1}{2} ", BBB + M + CCCCC1.Substring(0, 1), CCCCC1.Substring(1, 4), D1); D2 = Mod10(CCCCCCCCCC2); string Grupo2 = string.Format("{0}.{1}{2} ", CCCCCCCCCC2.Substring(0, 5), CCCCCCCCCC2.Substring(5, 5), D2); D3 = Mod10(CCCCCCCCCC3); string Grupo3 = string.Format("{0}.{1}{2} ", CCCCCCCCCC3.Substring(0, 5), CCCCCCCCCC3.Substring(5, 5), D3); string Grupo4 = string.Format("{0} {1}{2}", _dacBoleto, FatorVencimento(boleto).ToString(), Utils.FormatCode(boleto.ValorBoleto.ToString("f").Replace(",", "").Replace(".", ""), 10)); boleto.CodigoBarra.LinhaDigitavel = Grupo1 + Grupo2 + Grupo3 + Grupo4; }
public override DetalheRetorno LerDetalheRetornoCNAB400(string registro) { try { DetalheRetorno detalhe = new DetalheRetorno(registro); //Tipo de Identificação do registro detalhe.IdentificacaoDoRegistro = Utils.ToInt32(registro.Substring(0, 1)); //Tipo de inscrição detalhe.TipoInscricao = Utils.ToInt32(registro.Substring(1, 2)); //CGC ou CPF detalhe.CgcCpf = registro.Substring(3, 14); //Conta Corrente detalhe.ContaCorrente = Utils.ToInt32(registro.Substring(20, 17)); //Nosso Número detalhe.NossoNumeroComDV = registro.Substring(70, 12); detalhe.NossoNumero = registro.Substring(70, 11); //Sem o DV detalhe.DACNossoNumero = registro.Substring(82, 1); //DV //Seu Número detalhe.SeuNumero = registro.Substring(92, 13); //Instrução detalhe.Instrucao = Utils.ToInt32(registro.Substring(108, 2)); //Número do documento detalhe.NumeroDocumento = registro.Substring(128, 12); //Código do Raterio detalhe.CodigoRateio = Utils.ToInt32(registro.Substring(140, 4)); //Data Ocorrência no Banco int dataOcorrencia = Utils.ToInt32(registro.Substring(110, 8)); detalhe.DataOcorrencia = Utils.ToDateTime(dataOcorrencia.ToString("##-##-####")); //Data Vencimento do Título int dataVencimento = Utils.ToInt32(registro.Substring(148, 8)); detalhe.DataVencimento = Utils.ToDateTime(dataVencimento.ToString("##-##-####")); //Valor do Título decimal valorTitulo = Convert.ToInt64(registro.Substring(156, 13)); detalhe.ValorTitulo = valorTitulo / 100; //Banco Cobrador detalhe.BancoCobrador = Utils.ToInt32(registro.Substring(163, 3)); //Agência Cobradora detalhe.AgenciaCobradora = Utils.ToInt32(registro.Substring(172, 5)); //Espécie Título detalhe.EspecieTitulo = registro.Substring(177, 2); //Despesas de cobrança para os Códigos de Ocorrência (Valor Despesa) decimal despeasaDeCobranca = Convert.ToUInt64(registro.Substring(179, 13)); detalhe.DespeasaDeCobranca = despeasaDeCobranca / 100; //Outras despesas Custas de Protesto (Valor Outras Despesas) decimal outrasDespesas = Convert.ToUInt64(registro.Substring(192, 13)); detalhe.OutrasDespesas = outrasDespesas / 100; //Juros Mora decimal juros = Convert.ToUInt64(registro.Substring(205, 13)); detalhe.Juros = juros / 100; // IOF decimal iof = Convert.ToUInt64(registro.Substring(218, 13)); detalhe.IOF = iof / 100; //Abatimento Concedido sobre o Título (Valor Abatimento Concedido) decimal abatimento = Convert.ToUInt64(registro.Substring(231, 13)); detalhe.Abatimentos = abatimento / 100; //Desconto Concedido (Valor Desconto Concedido) decimal desconto = Convert.ToUInt64(registro.Substring(244, 13)); detalhe.Descontos = desconto / 100; //Valor Pago decimal valorPago = Convert.ToUInt64(registro.Substring(257, 13)); detalhe.ValorPago = valorPago / 100; //Outros Débitos decimal outrosDebitos = Convert.ToUInt64(registro.Substring(270, 13)); detalhe.OutrosDebitos = outrosDebitos / 100; //Outros Créditos decimal outrosCreditos = Convert.ToUInt64(registro.Substring(283, 13)); detalhe.OutrosCreditos = outrosCreditos / 100; // Data de Liquidação int dataLiquidacao = Utils.ToInt32(registro.Substring(299, 8)); detalhe.DataLiquidacao = Utils.ToDateTime(dataLiquidacao.ToString("##-##-####")); //Motivo de Rejeição detalhe.MotivosRejeicao = registro.Substring(364, 30); //Motivo de Rejeição detalhe.Sequencial = Utils.ToInt32(registro.Substring(394, 6)); return(detalhe); } catch (Exception ex) { throw new Exception("Erro ao ler detalhe do arquivo de RETORNO / CNAB 400.", ex); } }
/// <summary> /// A linha digitável será composta por cinco campos: /// 1º CAMPO - Composto pelo código do banco ( sem o dígito verificador = 422 ), /// código da moeda, as cinco primeiras posições do campo livre ou seja, da /// posição 20 à 24 do código de barras, e mais um dígito verificador deste campo. /// Após os 5 primeiros dígitos deste campo separar o conteúdo por um ponto ( . ). /// 2º CAMPO - Composto pelas posições 6 à 15 do campo livre ou seja, da /// posição 25 à 34 do código de barras e mais um dígito verificador deste campo. /// Após os 5 primeiros dígitos deste campo separar o conteúdo por um ponto ( . ). /// 3º CAMPO - Composto pelas posições 16 à 25 do campo livre ou seja, da /// posição 35 à 44 do código de barras, e mais um dígito verificador deste campo. /// Após os 5 primeiros dígitos deste campo separar o conteúdo por um ponto ( . ). /// 4º CAMPO - Composto pelo dígito de autoconferência do código de barras. /// 5º CAMPO - Composto pelo valor nominal do documento ou seja, pelas /// posições 06 à 19 do código de barras, com supressão de zeros a esquerda e /// sem edição ( sem ponto e vírgula ). Quando se tratar de valor zerado, a /// representação deverá ser 000 ( três zeros ). /// </summary> public override void FormataLinhaDigitavel(Boleto boleto) { //AAABC.CCCCX DDDDD.DDDDDY EEEEE.EEEEEZ K VVVVVVVVVVVVVV string LD = string.Empty; //Linha Digitável #region Campo 1 //Campo 1 string AAA = Utils.FormatCode(Codigo.ToString(), 3); string B = boleto.Moeda.ToString(); string CCCCC = CampoLivre(boleto).Substring(0, 4); string X = Mod10(AAA + B + CCCCC).ToString(); LD = string.Format("{0}{1}{2}.", AAA, B, CCCCC.Substring(0, 1)); LD += string.Format("{0}{1}", CCCCC.Substring(0, 4), X); #endregion Campo 1 #region Campo 2 string DDDDDD = CampoLivre(boleto).Substring(6, 15); string Y = Mod10(DDDDDD).ToString(); LD += string.Format("{0}.", DDDDDD.Substring(0, 5)); LD += string.Format("{0}{1} ", DDDDDD.Substring(5, 10), Y); #endregion Campo 2 #region Campo 3 string EEEEE = CampoLivre(boleto).Substring(12, 10); string Z = Mod10(EEEEE).ToString(); LD += string.Format("{0}.", EEEEE.Substring(0, 5)); LD += string.Format("{0}{1} ", EEEEE.Substring(5, 5), Z); #endregion Campo 3 #region Campo 4 string K = _dacBoleto.ToString(); LD += string.Format(" {0} ", K); #endregion Campo 4 #region Campo 5 string VVVVVVVVVVVVVV; if (boleto.ValorBoleto != 0) { VVVVVVVVVVVVVV = boleto.ValorBoleto.ToString("f").Replace(",", "").Replace(".", ""); VVVVVVVVVVVVVV = Utils.FormatCode(VVVVVVVVVVVVVV, 14); } else VVVVVVVVVVVVVV = "000"; LD += VVVVVVVVVVVVVV; #endregion Campo 5 boleto.CodigoBarra.LinhaDigitavel = LD; }