/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cCodCedente, string cModalidade, string cNossoNumero) { cCodCedente = CobUtil.Right(cCodCedente, 7); if (CobUtil.GetInt(cCodCedente) == 0) { throw new Exception("Informe o Código de Cedente"); } if (cModalidade == "14") { cNossoNumero = CobUtil.Right(cNossoNumero, 14); } else { cNossoNumero = cCodCedente + CobUtil.Right(cNossoNumero, 7); } string cLivre = "5" + cCodCedente + "00" + cNossoNumero; string cDAC = CobUtil.Modulo11Especial(cNossoNumero, 9).ToString(); cLivre = cLivre + cDAC; blt.NossoNumeroExibicao = cNossoNumero + "-" + cDAC; return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cContaNumero, string cCarteira, string cNossoNumero, string cModalidade) { cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 4); cCarteira = CobUtil.Right(cCarteira, 2); cContaNumero = CobUtil.Right(cContaNumero, 7); if (CobUtil.GetInt(cCarteira) == 0) { throw new Exception("Informe a Carteira"); } string DAC = NossoNumero(cCarteira, ref cModalidade, ref cNossoNumero); string cLivre = cAgenciaNumero + cCarteira + // 2 cModalidade + // 4 / 2 cNossoNumero + // 7 / 9 cContaNumero + "0"; if (cModalidade != "") { blt.NossoNumeroExibicao = cCarteira + "/" + cModalidade + "/" + cNossoNumero + "-" + DAC; } else { blt.NossoNumeroExibicao = cCarteira + "/" + cNossoNumero + "-" + DAC; } return(cLivre); }
public static string NossoNumero(ref string cConvenio, ref string cCodCedente, ref string cNossoNumero) { cConvenio = CobUtil.Right(cConvenio, 4); //Código da Cooperativa cCodCedente = CobUtil.Right(cCodCedente, 7); //Código do Cliente cNossoNumero = CobUtil.Right(cNossoNumero, 7); //Número do Título return(CalculaDigCoob(cConvenio + "000" + cCodCedente + cNossoNumero).ToString()); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cCodCedente, string cModalidade, string cNossoNumero) { cCodCedente = CobUtil.Right(cCodCedente, 11); cModalidade = CobUtil.Right(cModalidade, 1); if (CobUtil.GetInt(cCodCedente) == 0) { throw new Exception("Informe o código do cedente"); } if (CobUtil.GetInt(cModalidade) == 0) { throw new Exception("Informe o a modalidade"); } string cDAC12 = NossoNumero(ref cNossoNumero); string cLivre = cNossoNumero + cCodCedente + cModalidade + "021"; blt.NossoNumeroExibicao = cNossoNumero + "-" + cDAC12; // (Corresponde à Chave ASBACE) int nD1 = CobUtil.Modulo10(cLivre); int nD2 = CobUtil.Modulo11Negativo(cLivre + nD1.ToString()); if (nD2 == -1) // Veja a rotina do modulo11 { nD1 = nD1 + 1; nD2 = CobUtil.Modulo11Negativo(cLivre + nD1.ToString()); } cLivre = cLivre + nD1.ToString() + nD2.ToString(); return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cCodCedente, string cModalidade, string cNossoNumero) { cAgenciaNumero = CobUtil.Right(cAgenciaNumero.Split('-')[0], 4); cCodCedente = CobUtil.Right(cCodCedente, 9); cModalidade = CobUtil.Right(cModalidade, 1); //Indicador de desconto cNossoNumero = CobUtil.Right(cNossoNumero, 11); if (CobUtil.GetInt(cCodCedente) == 0) { throw new Exception("Informe o Código de Cedente"); } if (CobUtil.GetInt(cModalidade) == 0) { throw new Exception("Informe a Modalidade"); } string cLivre = cAgenciaNumero + cNossoNumero + cCodCedente + cModalidade; //No codigo de barras o nosso numero te 9 posições, mas no calculo do digito do nosso numero há 10 posições string cDAC = CobUtil.Modulo11Padrao(cAgenciaNumero + "0" + cNossoNumero, 9).ToString(); blt.NumeroDocumento = cNossoNumero + "-" + cDAC; blt.NossoNumeroExibicao = cNossoNumero; return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgencia, string cCodCedente, string cNossoNumero) { string[] cAgenciaParts = cAgencia.Split('-', '/'); string cAgenciaConta = CobUtil.Right(cAgenciaParts[0], 2); string cAgenciaDig = CobUtil.Right(cAgenciaParts[1], 1); cCodCedente = CobUtil.Right(cCodCedente, 9); cNossoNumero = CobUtil.Right(cNossoNumero, 8); if (Int32.Parse(cCodCedente) == 0) { throw new Exception("Informe o código do cedente"); } // cAgenciaDig string cDAC = CobUtil.Modulo11Padrao(cAgenciaConta + cNossoNumero, 9).ToString(); blt.NossoNumeroExibicao = cNossoNumero + "-" + cDAC; cNossoNumero = cNossoNumero + cDAC; string cLivre = cAgenciaConta + cCodCedente + cNossoNumero + "047"; // (Corresponde à Chave ASBACE) int nD1 = CobUtil.Modulo10(cLivre); int nD2 = CobUtil.Modulo11Negativo(cLivre + nD1.ToString()); if (nD2 == -1) // Veja a rotina do modulo11 { nD1 = nD1 + 1; nD2 = CobUtil.Modulo11Negativo(cLivre + nD1.ToString()); } cLivre = cLivre + nD1.ToString() + nD2.ToString(); return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cCodCedente, string cNossoNumero) { cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 3); cCodCedente = CobUtil.Right(cCodCedente, 7); cNossoNumero = CobUtil.Right(cNossoNumero, 8); if (Int32.Parse(cCodCedente) == 0) { throw new Exception("Informe o código do cedente"); } string cLivre = "21" + cAgenciaNumero + cCodCedente + cNossoNumero + "041"; string cDV = CobUtil.Modulo10(cLivre).ToString() + CobUtil.Modulo11Padrao(cLivre, 7).ToString(); cLivre = cLivre + cDV; string cDAC = CobUtil.Modulo10(cNossoNumero).ToString(); cDAC = cDAC + CobUtil.Modulo11Padrao(cNossoNumero + cDAC, 7); blt.NossoNumeroExibicao = cNossoNumero + "-" + cDAC; return(cLivre); }
public static string NossoNumero(ref string cNossoNumero) { cNossoNumero = CobUtil.Right(cNossoNumero, 8); string cD1 = CobUtil.Modulo11Especial(cNossoNumero, 9).ToString(); string cD2 = CobUtil.Modulo11Especial(cNossoNumero + cD1, 10).ToString(); return(cD1 + cD2); }
/// <summary> /// Clona os valores e propriedades das informações de um boleto. /// Fundamental para obter também as informações de registro complementares /// </summary> public BoletoInfo Clone() { BoletoInfo bi = (BoletoInfo)CobUtil.Clone(this); foreach (var r in Reg) { bi.Reg.Add(r.Key, r.Value); } return(bi); }
/* do arquivo: Sicred_Manual_Beneficiario_Cobranca_CNAB_400 == Atualizado 21/05/2015 * pag 7 * 5.4 Fórmula para cálculo do dígito verificador pelo módulo 11 * a) Relacionar os códigos da cooperativa de * crédito/agência beneficiária (aaaa), * posto beneficiário (pp), * do beneficiário (ccccc), * ano atual (yy), * indicador de geração do nosso número (b) (1: Agência cedente, 2 a 9: Cedente) e * o número seqüencial do beneficiário (nnnnn): * aaaappcccccyybnnnnn; * * pag 28 * Se a impressão for pela Sicredi (A) é possível deixar em branco (sem preenchimento - gerado automaticamente pelo Banco) ou informar "Nosso Número" devidamente preenchido. Se for impressão pelo Cedente (B) - informar o "Nosso Número" conforme exemplo informações abaixo: * 13 - ano atual * 2 a 9 - byte de geração "somente será "1" se forem boletos pré-impressos". * xxxxx - número sequencial * d - dígito verificador calculado ou seja, a nomenclatura correta é: 132xxxxxD => yybnnnnnd * * pag 51 * 10.7.1 Composição do campo livre do código de barras dos boletos do produto Sicredi cobrança para impressão completa dos boletos pelo beneficiário: * Posição / Tamanho / Conteúdo * C 20 – 20 01 Código numérico correspondente ao tipo de cobrança: “1” – Com Registro “3 – Sem Registro”. Obs.: O SICREDI não validará este campo. * R 21 – 21 01 Código numérico correspondente ao tipo de carteira: “1” - carteira simples * yybnnnnnd 22 – 30 09 Nosso número (Ano/Controle/Sequencial/DAC) * AAAA 31 – 34 04 Cooperativa de crédito/agência beneficiária * PP 35 – 36 02 Posto da cooperativa de crédito/agência beneficiária * CCCCC 37 – 41 05 Código do beneficiário * V 42 – 42 01 Será 1 (um) quando houver valor expresso no campo “valor do documento” * 0 43 – 43 01 Filler – zeros “0” * D 44 – 44 01 DV do campo livre calculado por módulo 11 com aproveitamento total (resto igual a 0 ou 1 DV cai para 0) * Final: CRyybnnnnndAAAAPPCCCCCV0D */ /// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cModalidade, string cCodCedente, string cNossoNumero, string cCarteira) { if (CobUtil.GetInt(cCodCedente) == 0) { throw new Exception("Informe o Código de Cedente"); } if (CobUtil.GetInt(cModalidade) == 0) { throw new Exception("Informe o Numero do 'Posto' na Modalidade"); } if (CobUtil.GetInt(cCarteira) != 1 && CobUtil.GetInt(cCarteira) != 3) { throw new Exception("Número de carteira inválido, informe 1=Registrada ou 3=Sem registro"); } cCarteira = CobUtil.Right(cCarteira, 1); MontaNossoNumero(ref cNossoNumero, ref cAgenciaNumero, ref cModalidade, ref cCodCedente); blt.NossoNumeroExibicao = //cAgenciaNumero + //cModalidade + "." + //cCodCedente + "." + //cNossoNumero; cNossoNumero.Substring(0, 2) + "/" + cNossoNumero.Substring(2, 6) + "-" + cNossoNumero.Substring(8, 1); blt.AgenciaConta = cAgenciaNumero + "." + cModalidade + "." + cCodCedente; // TODO: Criar algum campo que identifique quando for registrado, ou identificar pela carteira string cLivre = // Anterior + Atual = Noto Total cCarteira + // 0+1=1 (1-Com Registro, ou 3-SEM REGISTRO) "1" + // 1+1=2 cNossoNumero + // 2+9=11 cAgenciaNumero + // 11+4=15 cModalidade + // 15+2=17 cCodCedente + // 17+5=22 (blt.ValorDocumento > 0 ? "1" : "0") + // 22+1=23 "0"; // 23+1=24 blt.CarteiraExibicao = "1"; // Carteira Simples // Digito verificador geral do Campo Livre string cDV = CobUtil.Modulo11Especial(cLivre, 9).ToString(); cLivre += cDV; // 24+1=25 posições o campo livre - OK return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cContaNumero, string cModalidade, string cNossoNumero) { cNossoNumero = CobUtil.Right(cNossoNumero, 9); // O Nosso Numero tem que ter sempre 9 posições, sendo a primeira o digito "9" cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 4); cModalidade = CobUtil.Right(cModalidade, 2); // (mas será utilizado somente o ultimo digito da modalidade) cContaNumero = CobUtil.Right(cContaNumero, 6); // numero da conta sem o digito if (CobUtil.GetInt(cModalidade) == 0) { throw new Exception("Informe a Modalidade"); } if (cNossoNumero.Substring(0, 1) != "9") { throw new Exception("Para o Banco 'Nossa Caixa' o 'Nosso Numero' deve ter 9 posições iniciado sempre pelo digito '9'"); } string cContaDig = blt.Conta.Split('-')[1]; //O campo nosso numero tem que iniciar com 9 e ter 9 digitos string cLivre = cNossoNumero + cAgenciaNumero + cModalidade.Substring(1) + // utiliza apenas o ultimo digito da modalidade cContaNumero + "151"; int D1 = CobUtil.Modulo10(cLivre); int D2 = CobUtil.Modulo11Negativo(cLivre + D1.ToString()); while (D2 == -1) // Veja a rotina do modulo11 { D1 = D1 + 1; D2 = CobUtil.Modulo11Negativo(cLivre + D1.ToString()); } cLivre = cLivre + D1.ToString() + D2.ToString(); //Calucla o digito do Nosso Numero int nTotal = DVNossaCaixa(cAgenciaNumero + cModalidade + "0" + cContaNumero) + int.Parse(cContaDig); nTotal = nTotal + DVNossaCaixa(cNossoNumero); int nResto = nTotal % 10; nResto = 10 - nResto; blt.NossoNumeroExibicao = cNossoNumero + "-" + nResto; blt.CarteiraExibicao = "CIDENT"; blt.AgenciaConta = cAgenciaNumero + "/" + cModalidade + "/" + blt.Conta; return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cCodCedente, string cModalidade, string cNossoNumero) { // De acrodo com a documentação (pg 5) segue o calculo do digito do nosso numero cNossoNumero = CobUtil.Right(cNossoNumero, 11); // Força ter 11 digitos cModalidade = CobUtil.Right(cModalidade, 3); // Portfólio, 3 últimos dígitos do campo de identificação da empresa cCodCedente = CobUtil.Right(cCodCedente, 9); // 'Conta COSMOS (somente numeros, sem o indice - 1 digito) 0/123456/789 if (CobUtil.GetInt(cCodCedente) == 0) { throw new Exception("Informe o Código de Cedente"); } if (CobUtil.GetInt(cModalidade) == 0) { throw new Exception("Informe a Modalidade"); } string cDV = CobUtil.Modulo11Padrao(cNossoNumero, 9).ToString(); // Calcula o digito verificador blt.NossoNumeroExibicao = blt.NossoNumero + "." + cDV; // formata o numero com o digito na tela cNossoNumero += cDV; //acrescenta o digito no boleto //De acordo com a documentação (pg 9) os 25 caracteres do campo livre são //TAM - Descrição // 1 - Código do Produto 3 - Cobrança com registro / sem registro // 3 - Portfólio, 3 últimos dígitos do campo de identificação da empresa no CITIBANK (Posição 44 a 46 do arquivo retorno) // 6 - Base da conta COSMOS (pg 13, veja abaixo) // 2 - Seqüência da conta COSMOS (pg 13, veja abaixo) // 1 - Dígito Conta COSMOS (pg 13, veja abaixo) // 12 - Nosso Número //---- // 25 - Total (campo livre) //De acordo com a documentação (pg 13) temos a configuração da CONTA COSMOS //Ex.: 0/ 123456/ 789 = Conta Cosmos // 0 Índice //123456 Base (Posição 24 a 29) // 78 Seqüência (Posição 30 a 31) // 9 Dígito Verificador (Posição 32) //Parametros: //O código da conta COSMOS ficará no campo 'CodCedente' somento os numeros 123456789 //O código do portfolio ficará no campo 'Modalidade' string cLivre = "3" + cModalidade + cCodCedente + cNossoNumero; return(cLivre); }
/// <summary> /// Calculao código de Barras e a linha digitável (IPTE) /// </summary> public void CalculaBoleto() { CalcCodBar(); LinDigitavel = CobUtil.CalcLinDigitavel(this.CodBarras); if (RenderBoleto == null) { RenderBoleto = new BoletoNormal(); } if (RenderBoleto.Count == -1) { RenderBoleto.MakeFields(this); } }
/// <summary> /// define se deve ser usado a nova logica de geração no Santander em vez do antigo Banespa /// </summary> //public static bool useSantander = false; /// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <param name="cCodCedente">Código do Cedente</param> /// <param name="cNossoNumero">Nosso Numero</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cCodCedente, string cNossoNumero) { if (cCodCedente.Length != 11) { throw new Exception("O código do cedente deve ter 11 digitos"); } cCodCedente = CobUtil.Right(cCodCedente, 11); cNossoNumero = CobUtil.Right(cNossoNumero, 7); if (Int64.Parse(cCodCedente) == 0) { throw new Exception("Informe o código do cedente"); } string cLivre = cCodCedente + cNossoNumero + "00" + "033"; string cD1; string cD2; cD1 = CobUtil.Modulo10(cLivre).ToString(); cD2 = CobUtil.Modulo11Padrao(cLivre + cD1, 7).ToString(); if (cD2 == "1") { cD1 = "0"; loopDigitoInc: cD2 = CobUtil.Modulo11Padrao(cLivre + cD1, 7).ToString(); if (cD2 == "1") { cD1 = string.Format("{0}", Int32.Parse(cD1) + 1); goto loopDigitoInc; } } cLivre = cLivre + cD1 + cD2; string cAgenciaNumero = cCodCedente.Substring(0, 3); blt.NossoNumeroExibicao = cAgenciaNumero + " " + cNossoNumero + "-" + DVBanespa(cAgenciaNumero + cNossoNumero); //blt.NossoNumeroExibicao = cAgenciaNumero + " " + cNossoNumero + "-" + CobUtil.Modulo11Especial(cAgenciaNumero + cNossoNumero, 9); blt.AgenciaConta = cCodCedente.Substring(0, 3) + " " + cCodCedente.Substring(3, 2) + " " + cCodCedente.Substring(5, 5) + " " + cCodCedente.Substring(10, 1); return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cContaNumero, string cCarteira, string cCodCedente, string cNossoNumero, string cNumeroDocumento) { string cDAC = NossoNumero(ref cAgenciaNumero, ref cContaNumero, ref cCarteira, ref cNossoNumero); if (CobUtil.GetInt(cCarteira) == 0) { throw new Exception("Informe a Carteira"); } if (CobUtil.GetInt(cAgenciaNumero) == 0) { throw new Exception("Informe a Agencia"); } if (CobUtil.GetInt(cContaNumero) == 0) { throw new Exception("Informe a Conta"); } string cLivre; if (cCarteira == "107" || cCarteira == "122" || cCarteira == "142" || cCarteira == "143" || cCarteira == "196" || cCarteira == "198") { string cNumDoc = CobUtil.Right(cNumeroDocumento, 7); cCodCedente = CobUtil.Right(cCodCedente, 5); cLivre = cCarteira + cNossoNumero + cNumDoc + cCodCedente; cLivre += CobUtil.Modulo10(cLivre) + "0"; } else { cLivre = cCarteira + cNossoNumero + cDAC + cAgenciaNumero + cContaNumero + CobUtil.Modulo10(cAgenciaNumero + cContaNumero) + "000"; } blt.NossoNumeroExibicao = cCarteira + "/" + cNossoNumero + "-" + cDAC; blt.AgenciaConta = cAgenciaNumero + "/" + blt.Conta; return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cCarteira, string cCodCedente, string cAgencia, string cConta, string cNossoNumero) { string cLivre; if (CobUtil.GetInt(cCarteira) == 0) { throw new Exception("Informe a Carteira"); } if (cCarteira == "1" || cCarteira == "2") { cAgencia = CobUtil.Right(cAgencia.Replace("-", ""), 5); cConta = CobUtil.Right(cConta.Replace("-", ""), 9); cNossoNumero = CobUtil.Right(cNossoNumero, 9); cLivre = "7" + cAgencia + cConta + cNossoNumero + cCarteira; } else if (cCarteira == "4") { cCodCedente = CobUtil.Right(cCodCedente, 7); cNossoNumero = CobUtil.Right(cNossoNumero, 16); if (CobUtil.GetInt(cCodCedente) == 0) { throw new Exception("Informe o Código de Cedente"); } cLivre = "7" + cCodCedente + cNossoNumero + "4"; } else { throw new Exception("Este banco suporta apenas carteiras '1', '2' ou '4'"); } blt.NossoNumeroExibicao = cNossoNumero; return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cCarteira, string cParcela, string cConvenio, string cModalidade, string cCodCedente, string cNossoNumero) { //Ver página 6 da documentação cCarteira = CobUtil.Right(cCarteira, 1); //Código da carteira cModalidade = CobUtil.Right(cModalidade, 2); //Modalidade cParcela = CobUtil.Right(cParcela, 3); //Número da Parcela string cDV = NossoNumero(ref cConvenio, ref cCodCedente, ref cNossoNumero); cNossoNumero += cDV; string cLivre = cCarteira + cConvenio + cModalidade + cCodCedente + cNossoNumero + cParcela; blt.AgenciaConta = cConvenio + "/" + cCodCedente; blt.NossoNumeroExibicao = cNossoNumero.Substring(0, cNossoNumero.Length - 1) + "-" + cDV; return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cContaNumero, string cNossoNumero) { cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 4); cContaNumero = CobUtil.Right(cContaNumero, 7); cNossoNumero = CobUtil.Right(cNossoNumero, 13); string cDAC = CobUtil.Modulo10(cNossoNumero + cAgenciaNumero + cContaNumero).ToString(); string cLivre = cAgenciaNumero + cContaNumero + cDAC + cNossoNumero; blt.AgenciaConta = cAgenciaNumero + "/" + cContaNumero + "-" + cDAC; blt.NossoNumeroExibicao = cNossoNumero; return(cLivre); }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cCodCedente, string cCarteira, string cNossoNumero, string cModalidade) { cCodCedente = CobUtil.Right(cCodCedente, 7); // Formata e valida o código do Cedente com 7 digitos if (CobUtil.GetInt(cCodCedente) == 0) { throw new Exception("Informe o Código de Cedente"); } // Valida as carteiras disponíveis else if (!(cCarteira == "101" || cCarteira == "102" || cCarteira == "201")) { throw new Exception("Carteira invalida"); } else if (cModalidade.Length > 1) { throw new Exception("Modalidade inválida, em geral deve ser '0'(Zero), ou o valor do IOF para seguradoras"); } cNossoNumero = CobUtil.Right(cNossoNumero, 12); // Monta o Nosso Número 12 Digitos // (não importa se tiver 7 digitos no padrão CNAB400, pois zeros a frente não interfere na geração do digito do modulo 11) string cDig = CobUtil.Modulo11Especial(cNossoNumero, 9).ToString(); // Calcula o digito verificador string cLivre = "9" + cCodCedente + cNossoNumero + cDig + (cModalidade == "" ? "0" : cModalidade) + // IOF – Seguradoras (Se 7% informar 7, Limitado a 9%) Demais clientes usar 0 (zero) cCarteira; if (cCarteira == "101") // 101-Cobrança Simples Rápida COM Registro { blt.CarteiraExibicao = "COB SIMPLES RCR"; } else if (cCarteira == "102") // 102-Cobrança simples SEM Registro { blt.CarteiraExibicao = "COB SIMPLES CSR"; } else if (cCarteira == "201") // 201-Penhor { blt.CarteiraExibicao = "COB PENHOR RCR"; } blt.NossoNumeroExibicao = cNossoNumero + "-" + cDig; blt.AgenciaConta = blt.Agencia + " / " + cCodCedente; return(cLivre); }
public static string NossoNumeroDV(string cNossoNumero) { int nResto; int nTotalNumero = CobUtil.Modulo11Total(cNossoNumero, 9); nResto = (10 * nTotalNumero) % 11; string cDAC; if (nResto == 10) { cDAC = "X"; } else { cDAC = nResto.ToString(); } return(cDAC); }
/// <summary> /// Calcula o digito do nosso numero, já ajustando o comprimento total /// </summary> public static string NossoNumero(string cCarteira, ref string cModalidade, ref string cNossoNumero) { // para o digito verificador o nosso numero tem 11 digitos (Carteira+Modalidade+NossoNumero) // Mas quando o resto for 10, tem que aparecer 'P' // CobUtil.Modulo11Padrao(cCarteira + cModalidade + cNossoNumero, 7); // pagina 19 if (cNossoNumero.Length == 11) { cModalidade = ""; } else if (cModalidade.Length == 4) { // Modalidade com 4 digitos! cNossoNumero = CobUtil.Right(cNossoNumero, 7); } else { // Modalidade com 2 digitos cModalidade = CobUtil.Right(cModalidade, 2); cNossoNumero = CobUtil.Right(cNossoNumero, 9); } cCarteira = CobUtil.Right(cCarteira, 2); if (cModalidade.Length + cNossoNumero.Length != 11) { throw new Exception("Combinação Modalidade e Nosso numero invalidos"); } int TotalNumero = CobUtil.Modulo11Total(cCarteira + cModalidade + cNossoNumero, 7); TotalNumero *= 10; int Resto = TotalNumero % 11; if (Resto == 10) { return("P"); } else { return(Resto.ToString()); } }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cContaNumero, string cNossoNumero) { cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 4); cContaNumero = CobUtil.Right(cContaNumero, 10); cNossoNumero = CobUtil.Right(cNossoNumero, 10); string cDV = CobUtil.Modulo11Padrao(cNossoNumero, 9).ToString(); //O campo nosso numero tem que iniciar com 9 e ter 9 digitos string cLivre = cAgenciaNumero + cContaNumero + cNossoNumero + cDV; //Monta o Nosso Numero blt.NossoNumeroExibicao = cNossoNumero + "-" + cDV; return(cLivre); }
public static string NossoNumero(ref string cAgenciaNumero, ref string cContaNumero, ref string cCarteira, ref string cNossoNumero) { if (cContaNumero.Length > 5) { throw new Exception("O Número da conta deve contar no maximo 5 digitos, sem o verificador: 12345-6"); } cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 4); cContaNumero = CobUtil.Right(cContaNumero, 5); cCarteira = CobUtil.Right(cCarteira, 3); cNossoNumero = CobUtil.Right(cNossoNumero.Split('-')[0], 8); if (cCarteira == "112" || cCarteira == "126" || cCarteira == "131" || cCarteira == "146" || cCarteira == "150" || cCarteira == "168") { return(CobUtil.Modulo10(cCarteira + cNossoNumero).ToString()); } else { return(CobUtil.Modulo10(cAgenciaNumero + cContaNumero + cCarteira + cNossoNumero).ToString()); } }
/* Sicred_Manual_Beneficiario_Cobranca_CNAB_400.pdf - Página 7 * AA/BXXXXX-D * AA = Ano atual * B = Byte (2 a 9). 1 só poderá ser utilizado pela cooperativa. * XXXXX – Número livre de 00000 a 99999. * D = Digito Verificador pelo módulo 11. */ public static void MontaNossoNumero(ref string cNossoNumero, ref string cAgenciaNumero, ref string cModalidade, ref string cCodCedente) { cNossoNumero = CobUtil.Right(cNossoNumero, 5); cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 4); cModalidade = CobUtil.Right(cModalidade, 2); // Posto da Agência cedente - será colocado em modalidade cCodCedente = CobUtil.Right(cCodCedente, 5); cNossoNumero = string.Format("{0:yy}2", DateTime.Now) + // 3 cNossoNumero; // 3+5=8 // Digito Verificado só do Nosso Numero: aaaappcccccyybnnnnn // Aqui o nossonumero já está com o yybnnnnn string cDV = CobUtil.Modulo11Especial( cAgenciaNumero + cModalidade + cCodCedente + cNossoNumero, 9).ToString(); cNossoNumero += cDV; // 8+1=9 }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(string cConvenio, string cCarteira, string cNossoNumero) { cConvenio = CobUtil.Right(cConvenio, 5); cCarteira = CobUtil.Right(cCarteira, 2); cNossoNumero = CobUtil.Right(cNossoNumero, 13); if (CobUtil.GetInt(cConvenio) == 0) { throw new Exception("Informe o código do convenio"); } if (CobUtil.GetInt(cCarteira) == 0) { throw new Exception("Informe o a carteira"); } string cLivre = cConvenio + cNossoNumero.Substring(0, 3) + cCarteira + cNossoNumero.Substring(3) + "027"; cLivre = cLivre + CobUtil.Modulo10(cLivre); cLivre = cLivre + CobUtil.Modulo11Padrao(cLivre, 7); return(cLivre); }
/// <summary> /// Logica especial para modulo 11, que retorna -1 quando o resto é 1 /// </summary> /// <param name="sequencia">Sequencia a ser calculada</param> /// <returns>Retorna o digito, ou -1 quando nescessário</returns> public static int Modulo11Negativo(string sequencia) { int Total = CobUtil.Modulo11Total(sequencia, 7); // De acordo com a nota disponivel no manual do Banco Nossa Caixa na página 22 // o resto não deve ser aproximado, e deveremos considerar o digito=0 int Resto = Total % 11; if (Resto == 0) { return(0); } else if (Resto > 1) { return(11 - Resto); } else { // Recalcular D2 com (D1+1) // Retorna um valor negativo informando que deve ser recalculado com incremento return(-1); } }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cContaNumero, string cCarteira, string cNossoNumero) { cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 3); cContaNumero = CobUtil.Right(cContaNumero, 7); cCarteira = CobUtil.Right(cCarteira, 1); cNossoNumero = CobUtil.Right(cNossoNumero, 6); if (CobUtil.GetInt(cCarteira) == 0) { throw new Exception("Informe a Carteira"); } //O campo nosso numero tem que iniciar com 9 e ter 9 digitos string cLivre = "000" + cAgenciaNumero + cContaNumero + cCarteira + cNossoNumero + "070"; int D1 = CobUtil.Modulo10(cLivre); int D2 = CobUtil.Modulo11Negativo(cLivre + D1.ToString()); while (D2 == -1) // Veja a rotina do modulo11 { D1 = D1 + 1; D2 = CobUtil.Modulo11Negativo(cLivre + D1.ToString()); } cLivre = cLivre + D1.ToString() + D2.ToString(); //Monta o Nosso Numero blt.NossoNumeroExibicao = cCarteira + cNossoNumero + "070" + D1.ToString() + D2.ToString(); // Monta a Exibição da Agencia/Conta blt.AgenciaConta = "000 " + cAgenciaNumero + " " + cContaNumero; return(cLivre); }
/// <summary> /// Retorna o array de campos a serme renderizados nas posicições corretas /// </summary> /// <param name="blt">Instancia de todoas as váriáveis parametrizadas</param> public override void MakeFields(Boleto blt) { string cTextoAdd = ""; if (Fields == null) { Fields = new List <FieldDraw>(); } if (blt.ExibeReciboSacado) { // Logo do Cedente/Recebedor if (blt.CedenteLogo != null) { // Calcula a proporção para centralizar a imagem no local correto // fw? -> fh9 // w -> h // fw? = w*fh9/fh int h = blt.CedenteLogoHeight; // 9 int w = (int)((double)(h * blt.CedenteLogo.Width) / (double)blt.CedenteLogo.Height); int x = (35 - w) / 2; Fields.Add(new FieldDraw(x, 0, null, null, w, h) { Image = blt.CedenteLogo }); Height = h - 9; } else if (blt.ImageBanco != null) { // Logo padrão do Banco Fields.Add(new FieldDraw(0, 0, null, null, 35, 9) { Image = blt.ImageBanco }); Height = 0; } // Linha Superior Fields.Add(new FieldDraw(38, 3 + Height, null, blt.BancoCodigo, 15, 6, StringAlignment.Center, 0x05)); if (blt.ExibeReciboLinhaDigitavel) { Fields.Add(new FieldDraw(54, 3 + Height, null, blt.LinhaDigitavel, 115, 6, StringAlignment.Far, 0x00)); } else { Fields.Add(new FieldDraw(54, 3 + Height, null, BoletoTextos.Recibo, 115, 6, StringAlignment.Far, 0x00)); } // Linha 1: Centente, CNPJ, Vencimento Fields.Add(new FieldDraw(0, 9 + Height, BoletoTextos.Cedente, blt.Cedente, 94, 7, StringAlignment.Near, 0x0B)); Fields.Add(new FieldDraw(94, 9 + Height, blt.CedenteDocumentoTipo, blt.CedenteDocumento, 35) { Linhas = 0x0B }); Fields.Add(new FieldDraw(129, 9 + Height, "Vencimento", blt.DataVencimento.ToString("dd/MM/yyyy")) { Linhas = 0x0F, Destaque = true }); // Linha 2: Endereço, Sacado Fields.Add(new FieldDraw(0, 16 + Height, "Endereço", blt.CedenteEndereco, 94) { Align = StringAlignment.Near }); Fields.Add(new FieldDraw(94, 16 + Height, BoletoTextos.Sacado, blt.Sacado, 75) { Align = StringAlignment.Near, Linhas = 0x07 }); // TODO: Endereço do Savado ? blt.ExibeEnderecoReciboSacado ??? // Linha 3: Nosso Numero, Carteira, Espécie, Quantidade, Valor Fields.Add(new FieldDraw(0, 23 + Height, "Nosso Número", blt.NossoNumeroExibicao)); Fields.Add(new FieldDraw(40, 23 + Height, "Carteira", blt.CarteiraExibicao, 20) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(60, 23 + Height, BoletoTextos.EspecieDoc, blt.Especie.ToString(), 20) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(80, 23 + Height, "Quantidade", blt.Quantidade == 0 ? "" : blt.Quantidade.ToString(), 20) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(100, 23 + Height, "Valor", blt.ValorUnitario == 0 ? "" : blt.ValorUnitario.ToString("C"), 29)); Fields.Add(new FieldDraw(129, 23 + Height, BoletoTextos.CedenteConta, blt.AgenciaConta) { Linhas = 0x07 }); // Linha 4: Data, Numero, Aceite, Especie do documento, Aceite, Parcelamento, Valor Documento Fields.Add(new FieldDraw(0, 30 + Height, "Data do Documento", blt.DataDocumento.ToString("dd/MM/yyyy"))); Fields.Add(new FieldDraw(40, 30 + Height, "Número do Documento", blt.NumeroDocumento)); Fields.Add(new FieldDraw(80, 30 + Height, "Aceite", blt.Aceite, 20) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(100, 30 + Height, "Parcela", blt.ParcelaTotal > 0 ? (blt.ParcelaNumero + " de " + blt.ParcelaTotal) : "", 29) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(129, 30 + Height, "(=)Valor Documento", blt.ValorDocumento.ToString("C")) { Linhas = 0x07, Destaque = true }); // Linha 5: Demostrativo Fields.Add(new FieldDraw(0, 37 + Height, "Demonstrativo", cTextoAdd + CobUtil.ClearHTML(blt.Demonstrativo), 169, 11, StringAlignment.Near, 0x07)); Fields.Add(new FieldDraw(142, 48 + Height, "Autenticação Mecânica", null) { Linhas = 0x00 }); if (blt.ImageCorte != null) { Fields.Add(new FieldDraw(1, 53 + Height, null, null, 167, 3) { Image = blt.ImageCorte }); } Height += 60; } else { Height = 0; } // Segunda parte do boleto Width = 170; // Segunda parte Fields.Add(new FieldDraw(0, Height, null, null, 35, 9) { Image = blt.ImageBanco }); Fields.Add(new FieldDraw(38, 3 + Height, null, blt.BancoCodigo, 15, 6, StringAlignment.Center, 0x05)); Fields.Add(new FieldDraw(54, 3 + Height, null, blt.LinhaDigitavel, 115, 6, StringAlignment.Far, 0x00)); Fields.Add(new FieldDraw(0, 9 + Height, "Local de Pagamento", blt.LocalPagamento, 129, 7, StringAlignment.Near, 0x0B)); Fields.Add(new FieldDraw(129, 9 + Height, "Vencimento", blt.DataVencimento.ToString("dd/MM/yyyy")) { Linhas = 0x0F, Destaque = true }); string cCNPJ = blt.CedenteDocumento; if (cCNPJ != null && cCNPJ.Length == 14) { cCNPJ = cCNPJ.Substring(0, 2) + "." + cCNPJ.Substring(2, 3) + "." + cCNPJ.Substring(5, 3) + "/" + cCNPJ.Substring(8, 4) + "." + cCNPJ.Substring(12, 2); } Fields.Add(new FieldDraw(0, 16 + Height, BoletoTextos.Cedente, blt.Cedente, 96) { Align = StringAlignment.Near }); Fields.Add(new FieldDraw(96, 16 + Height, blt.CedenteDocumentoTipo, cCNPJ, 33)); Fields.Add(new FieldDraw(129, 16 + Height, BoletoTextos.CedenteConta, blt.AgenciaConta) { Linhas = 0x07 }); Fields.Add(new FieldDraw(0, 23 + Height, "Data Documento", blt.DataDocumento.ToString("dd/MM/yyyy"), 30)); Fields.Add(new FieldDraw(30, 23 + Height, "Número do Documento", blt.NumeroDocumento, 35)); Fields.Add(new FieldDraw(65, 23 + Height, BoletoTextos.EspecieDoc, blt.Especie.ToString(), 19) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(84, 23 + Height, "Aceite", blt.Aceite, 12) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(96, 23 + Height, "Data Processamento", blt.DataProcessamento.ToString("dd/MM/yyyy"), 33)); Fields.Add(new FieldDraw(129, 23 + Height, "Nosso Número", blt.NossoNumeroExibicao) { Linhas = 0x07 }); if (blt.CIP != "") { Fields.Add(new FieldDraw(0, 30 + Height, "Uso do Banco", "", 20)); // TODO: A ser descontinuado! Fields.Add(new FieldDraw(20, 30 + Height, "CIP", blt.CIP, 10) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(30, 30 + Height, "Carteira", blt.CarteiraExibicao, 21) { Align = StringAlignment.Center }); } else { Fields.Add(new FieldDraw(0, 30 + Height, "Carteira", blt.CarteiraExibicao, 51) { Align = StringAlignment.Center }); } Fields.Add(new FieldDraw(51, 30 + Height, "Espécie", "R$", 14) { Align = StringAlignment.Center, Destaque = true }); Fields.Add(new FieldDraw(65, 30 + Height, "Quantidade", blt.Quantidade == 0 ? "" : blt.Quantidade.ToString(), 31) { Align = StringAlignment.Center }); Fields.Add(new FieldDraw(96, 30 + Height, "(x)Valor", blt.ValorUnitario == 0 ? "" : blt.ValorUnitario.ToString("C"), 33)); Fields.Add(new FieldDraw(129, 30 + Height, "(=)Valor Documento", blt.ValorDocumento.ToString("C")) { Linhas = 0x07, Destaque = true }); Fields.Add(new FieldDraw(0, 37 + Height, BoletoTextos.Instrucoes, cTextoAdd + CobUtil.ClearHTML(blt.Instrucoes), 129, 35, StringAlignment.Near)); Fields.Add(new FieldDraw(129, 37 + Height, "(-)Descontos/Abatimentos", blt.ValorDesconto > 0 ? blt.ValorDesconto.ToString("C") : "") { Linhas = 0x07 }); Fields.Add(new FieldDraw(129, 44 + Height, "(-)Outras Deduções", blt.ValorOutras > 0 ? blt.ValorOutras.ToString("C") : "") { Linhas = 0x07 }); Fields.Add(new FieldDraw(129, 51 + Height, "(+)Mora/Multa", blt.ValorMoraMulta > 0 ? blt.ValorMoraMulta.ToString("C") : "") { Linhas = 0x07 }); Fields.Add(new FieldDraw(129, 58 + Height, "(+)Outros Acréscimos", blt.ValorAcrescimo > 0 ? blt.ValorAcrescimo.ToString("C") : "") { Linhas = 0x07 }); double nValor = blt.ValorDocumento - blt.ValorDesconto - blt.ValorOutras + blt.ValorMoraMulta + blt.ValorAcrescimo; Fields.Add(new FieldDraw(129, 65 + Height, "(=)Valor", nValor > 0 && nValor != blt.ValorDocumento ? nValor.ToString("C") : "") { Linhas = 0x07 }); Fields.Add(new FieldDraw(0, 72 + Height, BoletoTextos.Sacado, blt.Sacado + " - " + blt.SacadoDocumento + "\r\n" + blt.SacadoEndereco + "\r\n" + blt.Bairro + " - " + blt.Cidade + " - " + blt.Cep + " - " + blt.UF, 169, 14, StringAlignment.Near, 0x0F)); if (!string.IsNullOrEmpty(blt.Avalista)) { Fields.Add(new FieldDraw(100, 79 + Height, BoletoTextos.Avalista, blt.Avalista, 100, 7, StringAlignment.Near, 0)); } Fields.Add(new FieldDraw(114, 86 + Height, "Autenticação Mecânica / Ficha de compensação", null) { Linhas = 0x00 }); if (!string.IsNullOrEmpty(blt.CodigoBarras)) { Fields.Add(new FieldDraw(5, 88 + Height, null, null, 0, 9) { Image = CobUtil.BarCodeImage(blt.CodigoBarras, 3, blt.DPI) }); } Height += 85 + 15; }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cCodCedente, string cConvenio, string cCarteira, string cNossoNumero) { if (long.Parse(cCodCedente) == 0L) { throw new Exception("Informe a Código de Cedente"); } if (cCodCedente.Length == 15) { cNossoNumero = CobUtil.Right(cNossoNumero, 10); string cLivre = cNossoNumero + cCodCedente; blt.NossoNumeroExibicao = cNossoNumero + "-" + CobUtil.Modulo11Especial(cNossoNumero, 9).ToString(); cCodCedente += CobUtil.Modulo11Padrao(cCodCedente, 9).ToString(); blt.AgenciaConta = cCodCedente.Substring(0, 4) + "/" + cCodCedente.Substring(4, 3) + "." + cCodCedente.Substring(7, 8) + "." + cCodCedente.Substring(15, 1); return(cLivre); } else if (CobUtil.GetInt(cCarteira) == 0) // obrigatório para os outros casos { throw new Exception("Informe a Carteira"); } else if (cCodCedente.Length == 6) { // PADRÃO SIGCB (Nosso numero com 7 posições) // XYNNNNNNNNNNNNNNN-D, onde: //(12123456789012345-1) // X – Modalidade Cobrança (1 – Registrada/2 – Sem Registro) // Y – Emissão do bloqueto (4 – cedente) // N - Numeros Livres de identificação do Nosso Numero // D - Digito do Código do Cedente // dai apenas 15 são de fato uteis! cNossoNumero = CobUtil.Right(cNossoNumero, 15); string cNN1 = cNossoNumero.Substring(0, 3); string cNN2 = cNossoNumero.Substring(3, 3); string cNN3 = cNossoNumero.Substring(6, 9); // digito de verificação do código de cedente //string cDV1 = CobUtil.Modulo11Especial(cCodCedente, 9).ToString(); //alterado em 2/12 para modulo padrão! string cDV1 = CobUtil.Modulo11Especial(cCodCedente, 9).ToString(); cCarteira = CobUtil.Right(cCarteira, 1); string cLivre = cCodCedente + cDV1 + // 6 + 1 = 7 cNN1 + cCarteira + // 3 + 1 = 4 cNN2 + "4" + cNN3; // 3 + 1 + 9 = 13 (a constante "4" indica emissão no CEDENTE // 7 + 4 + 13 = 24 cLivre += CobUtil.Modulo11Especial(cLivre, 9); // 24 + 1 = 25 OK // exibição da agencia/conta blt.AgenciaConta = cAgenciaNumero + "/" + cCodCedente + "-" + cDV1; // exibição do nosso numero cNossoNumero = cCarteira + "4" + cNossoNumero; blt.NossoNumeroExibicao = cNossoNumero + "-" + CobUtil.Modulo11Especial(cNossoNumero, 9).ToString(); blt.NossoNumeroExibicao = blt.NossoNumeroExibicao.Substring(0, 2) + "/" + blt.NossoNumeroExibicao.Substring(2); if (cCarteira == "1") { blt.CarteiraExibicao = "RG"; } else // 2 { blt.CarteiraExibicao = "SR"; } return(cLivre); } else if (cCarteira == "8") { /* Carteira 8 - Cobrança sem Registro com 16 de Nosso Numero * ==========(página 5 do arquivo de documentação: Caixa-Carteira8.pdf) * IX - CAMPO LIVRE (posições 20 a 44) * Para as posições do Campo Livre, informar: * XXXXX AAAA C K NNNNNNNNNNNNNN * Onde: * XXXXX - Código do Cliente Cedente fornecido pela CAIXA * AAAA - CNPJ da Agência da Conta do Cliente Cedente * C - Código da Carteira = 8 * K - Constante = 7 * NNNNNNNNNNNNNN - Nosso Número do Cliente com 14 posições. * */ cCodCedente = CobUtil.Right(cCodCedente, 5); // Código do Cedente cConvenio = CobUtil.Right(cConvenio, 4); // CNPJ da Agencia da Conta do Cliente cNossoNumero = CobUtil.Right(cNossoNumero, 14); // Nosso Numero com 12 posições if (Int32.Parse(cConvenio) == 0) { throw new Exception("Informe o Código do Convenio"); } string cLivre = cCodCedente + cConvenio + cCarteira + // Carteira 8 "7" + // Constante K cNossoNumero; cNossoNumero = "8" + cNossoNumero; blt.NossoNumeroExibicao = cNossoNumero + "-" + CobUtil.Modulo11Especial(cNossoNumero, 9).ToString(); blt.CarteiraExibicao = "SR"; string cCod = cConvenio + ".870.000" + cCodCedente; string cCoddig = cCod.Replace(".", ""); blt.AgenciaConta = cCod + "-" + CobUtil.Modulo11Padrao(cCoddig, 9); return(cLivre); } else { /* Carteira Padrão - Cobrança sem Registro com 17 de Nosso Numero * ===============(página 5 do arquivo de documentação: Caixa-CarteiraPadrão.pdf) * 1 - Fixo * XXXXXX - Código do Cliente Cedente fornecido pela CAIXA * 9 - Fixo * NNNNNNNNNNNNNNNN - Nosso Número do Cliente com 17 posições. */ cCodCedente = CobUtil.Right(cCodCedente, 6); // Código do Cliente será informado em 'Cedente' e será substituido na no Numero da Conta do Cliente! cNossoNumero = "9" + CobUtil.Right(cNossoNumero, 17); // Adiciona o '9' Fixo! mais os 17 numeros do campo 'Nosso Numero' string cLivre = "1" + cCodCedente + cNossoNumero; // Monta a exibição do Nosso Numero com o Digito Verificador blt.NossoNumeroExibicao = cNossoNumero + "-" + CobUtil.Modulo11Especial(cNossoNumero, 9); return(cLivre); } }
/// <summary> /// Rotina de Geração do Campo livre usado no Código de Barras para formar o IPTE /// </summary> /// <param name="blt">Intancia da Classe de Boleto</param> /// <returns>String de 25 caractere que representa 'Campo Livre'</returns> public static string CampoLivre(Boleto blt, string cAgenciaNumero, string cContaNumero, string cCodCedente, string cModalidade, string cCarteira, string cNossoNumero) { // Verificar CNR ou CNR Facil cAgenciaNumero = CobUtil.Right(cAgenciaNumero, 4); cContaNumero = CobUtil.Right(cContaNumero, 5); cCodCedente = CobUtil.Right(cCodCedente, 7); if (CobUtil.GetInt(cCodCedente) == 0) { throw new Exception("Informe o Código de Cedente"); } string cTotal = "0"; string cDataJuliana = "0000"; string cLivre; DateTime dtVenc = blt.DataVencimento; //Utilizar o identificador 5 sempre que a data de vencimento estiver em branco e sem fator de vencimento. if (dtVenc == new DateTime(2001, 1, 1)) { cModalidade = "5"; } if (cCarteira == "01") //Sem Registro { cNossoNumero = CobUtil.Right(cNossoNumero, 13); cNossoNumero = cNossoNumero + CobUtil.Modulo11Especial(cNossoNumero, 9).ToString(); // Identificador 4: vincula vencimento, código do cedente e código do documento if (cModalidade == "4") { // Monta a Data Juliana do Venciento string cDia = CobUtil.Right(dtVenc.Day.ToString(), 2); string cMes = CobUtil.Right(dtVenc.Month.ToString(), 2); string cAno = CobUtil.Right(dtVenc.Year.ToString(), 2); cDataJuliana = cDia + cMes + cAno; // Efetua a soma Nosso numero (+Fim 4) + Cedente + Vencimento cNossoNumero = cNossoNumero + "4"; cTotal = CobUtil.Soma(cDataJuliana, cCodCedente); cTotal = CobUtil.Soma(cNossoNumero, cTotal); cNossoNumero = cNossoNumero + ModuloHSBC(cTotal); DateTime dStart = new DateTime(dtVenc.Year, 1, 1); int nDias = (int)((TimeSpan)dtVenc.Subtract(dStart)).TotalDays + 1; cDataJuliana = CobUtil.Right(nDias.ToString(), 3) + CobUtil.Right(dtVenc.Year.ToString(), 1); blt.CarteiraExibicao = "CNR"; blt.AgenciaConta = cCodCedente; blt.Especie = Especies.DM; blt.LocalPagamento = "PAGAR PREFERENCIALMENTE EM AGENCIA HSBC"; } else if (cModalidade == "5") { // Identificador 5: vincula código do cedente e código do documento. // Efetua a soma Nosso Bumero (+Fim 5) + Cedente cNossoNumero = cNossoNumero + "5"; cTotal = CobUtil.Soma(cNossoNumero, cCodCedente); cNossoNumero = cNossoNumero + ModuloHSBC(cTotal); cDataJuliana = "0000"; } cLivre = CobUtil.Right(cCodCedente, 7) + CobUtil.Right(blt.NossoNumero, 13) + cDataJuliana + "2"; } else // Cartrira 00 { cNossoNumero = CobUtil.Right(cNossoNumero, 11); cCodCedente = CobUtil.Right(cCodCedente, 11); cCarteira = CobUtil.Right(cCarteira, 2); cModalidade = CobUtil.Right(cModalidade, 1); cLivre = cNossoNumero + cCodCedente + cCarteira + cModalidade; } //if (cModalidade != "5") blt.NossoNumeroExibicao = cNossoNumero.Substring(0, cNossoNumero.Length - 3) + " " + cNossoNumero.Substring(cNossoNumero.Length - 3); //else // blt.NossoNumeroExibicao = cNossoNumero; return(cLivre); }