/// <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); }
/// <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 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 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> /// 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 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); }
/// <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> /// 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); } }
private void CalcCodBar() { #region "Área comum a todos os bancos" string cCodePadrao, cDV, cLivre = ""; string cBanco = this.Banco.Split('-')[0]; string cCalcFat = CobUtil.CalcFatVenc(this.DataVencimento).ToString(); string cNossoNumero = this.NossoNumero.Split('-', '/')[0]; string cAgenciaNumero = this.Agencia.Split('-', '/')[0]; string cContaNumero = this.Conta.Split('-', '/')[0]; string cCarteira = this.Carteira; string cModalidade = this.Modalidade; string cCodCedente = this.CodCedente.Split('-', '/')[0]; string cCedente = this.Cedente; string cConvenio = this.Convenio.Split('-', '/')[0]; string cValor = this.ValorCobrado > 0 ? this.ValorCobrado.ToString() : this.ValorDocumento.ToString(); cValor = cValor.Replace(".", ","); if (cValor.IndexOf(",") != -1) { cValor += "00"; int n = cValor.IndexOf(","); cValor = cValor.Substring(0, n) + cValor.Substring(n + 1, 2); } else { cValor = cValor + "00"; } cCodePadrao = CobUtil.Right(cBanco, 3) + this.Moeda + CobUtil.Right(cCalcFat, 4) + CobUtil.Right(cValor, 10); #endregion if (onMontaCampoLivre != null) { #region "Banco/Carteira personalizada - definida pelo usuário" string[] cDIG = this.Banco.Split('-'); if (cDIG.Length > 1) { BancoDigito = cDIG[1]; } cLivre = onMontaCampoLivre(this); if (cLivre == null || cLivre.Length != 25) { throw new Exception("onMontaCampoLivre é nulo ou não retorna 25 posições"); } else { int n; string cValidChars = "0123456789"; for (n = 0; n < 25; n++) { if (cValidChars.IndexOf(cLivre.Substring(n, 1)) == -1) { throw new Exception("Caracter inválido na " + n.ToString() + "º posição da string '" + cLivre + "'"); } } } #endregion } else { // Verifica se o banco não foi especificado if (cBanco == "") { CodBarras = new String('0', 44); return; } #region Bancos //Montegem do campo livre switch (Int32.Parse(cBanco)) { case 1: // BANCO DO BRASIL BancoDigito = Banco_do_Brasil.BancoDigito; cLivre = Banco_do_Brasil.CampoLivre(this, cAgenciaNumero, cContaNumero, cConvenio, cModalidade, cCarteira, cNossoNumero); break; case 21: // BANESTES BancoDigito = Banco_Banestes.BancoDigito; cLivre = Banco_Banestes.CampoLivre(this, cCodCedente, cModalidade, cNossoNumero); break; case 27: // BESC BancoDigito = Banco_BESC.BancoDigito; cLivre = Banco_BESC.CampoLivre(cConvenio, cCarteira, cNossoNumero); break; case 33: // BANESPA SANTANDER BancoDigito = Banco_Banespa.BancoDigito; if (useSantander || (cModalidade != null && cModalidade.ToUpper() == "SANTANDER")) // Todo: ideal: (cCarteira == "101" || cCarteira == "102" || cCarteira == "201")) // { cLivre = Banco_Santander.CampoLivre(this, cCodCedente, cCarteira, cNossoNumero, cModalidade); } else { cLivre = Banco_Banespa.CampoLivre(this, cCodCedente, cNossoNumero); } break; case 41: // BARINSUL BancoDigito = Banco_Banrisul.BancoDigito; cLivre = Banco_Banrisul.CampoLivre(this, cAgenciaNumero, cCodCedente, cNossoNumero); break; case 47: // BANESE BancoDigito = Banco_Banese.BancoDigito; cLivre = Banco_Banese.CampoLivre(this, this.Agencia, cCodCedente, cNossoNumero); break; case 70: // BRB BancoDigito = Banco_BRB.BancoDigito; cLivre = Banco_BRB.CampoLivre(this, cAgenciaNumero, cContaNumero, cCarteira, cNossoNumero); break; case 91: // UNICRED BancoDigito = Banco_UniCred.BancoDigito; cLivre = Banco_UniCred.CampoLivre(this, cAgenciaNumero, cContaNumero, cNossoNumero); break; case 104: // CAIXA ECONOMICA FEDERAL BancoDigito = Banco_Caixa.BancoDigito; cLivre = Banco_Caixa.CampoLivre(this, cAgenciaNumero, cCodCedente, cConvenio, cCarteira, cNossoNumero); break; case 151: // NOSSA CAIXA BancoDigito = Banco_NossaCaixa.BancoDigito; cLivre = Banco_NossaCaixa.CampoLivre(this, cAgenciaNumero, cContaNumero, cModalidade, cNossoNumero); break; case 237: // BRADESCO BancoDigito = Banco_Bradesco.BancoDigito; cLivre = Banco_Bradesco.CampoLivre(this, cAgenciaNumero, cContaNumero, cCarteira, cNossoNumero, cModalidade); break; case 341: // ITAU BancoDigito = Banco_Itau.BancoDigito; cLivre = Banco_Itau.CampoLivre(this, cAgenciaNumero, cContaNumero, cCarteira, cCodCedente, cNossoNumero, NumeroDocumento); break; case 347: // SUDAMERIS BancoDigito = Banco_Sudameris.BancoDigito; cLivre = Banco_Sudameris.CampoLivre(this, cAgenciaNumero, cContaNumero, cNossoNumero); break; case 353: // SANTANDER BancoDigito = Banco_Santander.BancoDigito; cLivre = Banco_Santander.CampoLivre(this, cCodCedente, cCarteira, cNossoNumero, cModalidade); break; case 356: // REAL BancoDigito = Banco_Real.BancoDigito; cLivre = Banco_Real.CampoLivre(this, cAgenciaNumero, cContaNumero, cNossoNumero); break; case 389: // MERCANTIL BancoDigito = Banco_Mercantil.BancoDigito; cLivre = Banco_Mercantil.CampoLivre(this, cAgenciaNumero, cCodCedente, cModalidade, cNossoNumero); break; case 399: // HSBC BancoDigito = Banco_HSBC.BancoDigito; cLivre = Banco_HSBC.CampoLivre(this, cAgenciaNumero, cContaNumero, cCodCedente, cModalidade, cCarteira, cNossoNumero); break; case 409: // UNIBANCO BancoDigito = Banco_Unibanco.BancoDigito; cLivre = Banco_Unibanco.CampoLivre(this, cCodCedente, cModalidade, cNossoNumero); break; case 422: // SAFRA BancoDigito = Banco_Safra.BancoDigito; cLivre = Banco_Safra.CampoLivre(this, cCarteira, cCodCedente, Agencia, Conta, cNossoNumero); break; case 745: // CITIBANK BancoDigito = Banco_CitiBank.BancoDigito; cLivre = Banco_CitiBank.CampoLivre(this, cCodCedente, cModalidade, cNossoNumero); break; case 748: // SICREDI BancoDigito = Banco_Sicredi.BancoDigito; cLivre = Banco_Sicredi.CampoLivre(this, cAgenciaNumero, cModalidade, cCodCedente, cNossoNumero, cCarteira); break; case 756: // SICOOB BancoDigito = Banco_SICOOB.BancoDigito; cLivre = Banco_SICOOB.CampoLivre(this, cCarteira, this.ParcelaNumero.ToString(), cConvenio, cModalidade, cCodCedente, cNossoNumero); break; default: // Erro: Banco não implementado throw new Exception("Banco invalido ou ainda não implementado"); } #endregion } if (cLivre.Length != 25) { throw new Exception("O Campo Livre deve conter exatamente 25 posições!\n'" + cLivre + "' Length=" + cLivre.Length.ToString()); } if (cBanco == "151") // Caso especial para Nossa Caixa { cDV = CobUtil.Modulo11Especial(cCodePadrao + cLivre, 9).ToString(); } else { cDV = CobUtil.Modulo11Padrao(cCodePadrao + cLivre, 9).ToString(); } CodBarras = cCodePadrao.Substring(0, 4) + cDV + cCodePadrao.Substring(4, 14) + cLivre; }