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; }