Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        /// <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);
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
        /// <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);
            }
        }
Ejemplo n.º 9
0
        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;
        }