<commit_before>﻿using System;
using System.Web.UI;
using BoletoNet;
using System.Text;
using BoletoNet.EDI.Banco;

[assembly: WebResource("BoletoNet.Images.085.jpg", "image/jpg")]

namespace BoletoNet {

    /// <summary>
    /// Classe referente a CECRED
    /// VIACRED, ACREDI, CREDIFIESC, CECRISACRED, CREDELESC
    /// TRANSPOCRED, CREDIFOZ, CREDCREA, SCRCRED, RODOCREDITO
    /// CREDICOMIN, CREVISC, VIACREDI(ALTOVALE), TRANSULCRED
    /// </summary>
    internal class Banco_Cecred : AbstractBanco, IBanco {

        internal Banco_Cecred() {
            this.Codigo = 085;
            this.Digito = "1";  // TODO verificar digito banco cecred
            this.Nome = "CECRED";
        }

        /// <summary>
        /// 
        ///    01 a 03 -  3 - 033 fixo - Código do banco
        ///    04 a 04 -  1 - 9 fixo - Código da moeda (R$)
        ///    05 a 05 -  1 - Dígito verificador do Código de barras
        ///    06 a 09 -  4 - Fator de vencimento
        ///    10 a 19 - 10 - Valor
        ///    20 a 25 -  6 - Nº convenio da cooperativa
        ///    26 a 33 -  8 - Nº Conta corrente
        ///    34 - 42 - 9 -  Número boleto
        ///    43 - 44 - 2 - Código da carteira
        ///    
        /// </summary>
        /// <param name="boleto"></param>
        void IBanco.FormataCodigoBarra(Boleto boleto) {

            string codigoBanco = Utils.FormatCode(this.Codigo.ToString(), 3);
            string codigoMoeda = "9";
            string fatorVencimento = FatorVencimento(boleto).ToString();
            string valorNominal = Utils.FormatCode(boleto.ValorBoleto.ToString("f").Replace(",", "").Replace(".", ""), 10);//10
            string numeroConvenio = Utils.FormatCode(boleto.Cedente.Codigo, 6);
            string numeroConta = Utils.FormatCode(boleto.Cedente.ContaBancaria.Conta + boleto.Cedente.ContaBancaria.DigitoConta, 8);
            string nossoNumero = Utils.FormatCode(boleto.NossoNumero, 9);
            string codigoCarteira = Utils.FormatCode(boleto.Carteira, 2);

            string parte1 = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}",
                codigoBanco, codigoMoeda, fatorVencimento.ToString(), valorNominal, numeroConvenio, numeroConta, nossoNumero, codigoCarteira);

            var digCodigoBarras = Calcula11(parte1).ToString();

            boleto.CodigoBarra.Codigo = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}",
                codigoBanco, codigoMoeda, digCodigoBarras, fatorVencimento.ToString(), valorNominal, numeroConvenio, numeroConta, nossoNumero, codigoCarteira);

        }

        int Calcula11(string parte1) {
            int sum = 0;
            for (int i = parte1.Length - 1, multiplier = 2; i >= 0; i--) {
                sum += (int)char.GetNumericValue(parte1[i]) * multiplier;
                if (++multiplier > 9) multiplier = 2;
            }

            int mod = (sum % 11);
            if (mod == 0 || mod == 1) return 0;
            return (11 - mod);
        }

        void IBanco.FormataLinhaDigitavel(Boleto boleto) {

            string codigoBanco = Utils.FormatCode(this.Codigo.ToString(), 3);
            string codigoMoeda = "9";
            string fatorVencimento = FatorVencimento(boleto).ToString();<commit_msg>Signed-off-by: Edson <<EMAIL>><commit_after>﻿using System;
using System.Web.UI;
using BoletoNet;
using System.Text;
using BoletoNet.EDI.Banco;

[assembly: WebResource("BoletoNet.Images.085.jpg", "image/jpg")]

namespace BoletoNet {

    /// <summary>
    /// Classe referente a CECRED
    /// VIACRED, ACREDI, CREDIFIESC, CECRISACRED, CREDELESC
    /// TRANSPOCRED, CREDIFOZ, CREDCREA, SCRCRED, RODOCREDITO
    /// CREDICOMIN, CREVISC, VIACREDI(ALTOVALE), TRANSULCRED
    /// </summary>
    internal class Banco_Cecred : AbstractBanco, IBanco {

        internal Banco_Cecred() {
            this.Codigo = 085;
            this.Digito = "1";  // TODO verificar digito banco cecred
            this.Nome = "CECRED";
        }

        /// <summary>
        /// 
        ///    01 a 03 -  3 - 033 fixo - Código do banco
        ///    04 a 04 -  1 - 9 fixo - Código da moeda (R$)
        ///    05 a 05 -  1 - Dígito verificador do Código de barras
        ///    06 a 09 -  4 - Fator de vencimento
        ///    10 a 19 - 10 - Valor
        ///    20 a 25 -  6 - Nº convenio da cooperativa
        ///    26 a 33 -  8 - Nº Conta corrente
        ///    34 - 42 - 9 -  Número boleto
        ///    43 - 44 - 2 - Código da carteira
        ///    
        /// </summary>
        /// <param name="boleto"></param>
        void IBanco.FormataCodigoBarra(Boleto boleto) {

            string codigoBanco = Utils.FormatCode(this.Codigo.ToString(), 3);
            string codigoMoeda = "9";
            string fatorVencimento = FatorVencimento(boleto).ToString();
            string valorNominal = Utils.FormatCode(boleto.ValorBoleto.ToString("f").Replace(",", "").Replace(".", ""), 10);//10
            string numeroConvenio = Utils.FormatCode(boleto.Cedente.Codigo, 6);
            string numeroConta = Utils.FormatCode(boleto.Cedente.ContaBancaria.Conta + boleto.Cedente.ContaBancaria.DigitoConta, 8);
            string nossoNumero = Utils.FormatCode(boleto.NossoNumero, 9);
            string codigoCarteira = Utils.FormatCode(boleto.Carteira, 2);

            string parte1 = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}",
                codigoBanco, codigoMoeda, fatorVencimento.ToString(), valorNominal, numeroConvenio, numeroConta, nossoNumero, codigoCarteira);

            var digCodigoBarras = Calcula11(parte1).ToString();

            boleto.CodigoBarra.Codigo = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}",
                codigoBanco, codigoMoeda, digCodigoBarras, fatorVencimento.ToString(), valorNominal, numeroConvenio, numeroConta, nossoNumero, codigoCarteira);

        }

        int Calcula11(string parte1) {
            int sum = 0;
            for (int i = parte1.Length - 1, multiplier = 2; i >= 0; i--) {
                sum += (int)char.GetNumericValue(parte1[i]) * multiplier;
                if (++multiplier > 9) multiplier = 2;
            }

            int mod = (sum % 11);

            // <NAME> 04/04/2016
            // Manual CNAB 400_11-2014.pdf pagina 12 diz para retornar 1, caso 0 ou 1
            if (mod == 0 || mod == 1) return 1;

            return (11 - mod);
        }

        void IBanco.FormataLinhaDigitavel(Boleto boleto) {

            string codigoBanco = Utils.FormatCode(this.Codigo.ToString(), 3);
            string codigoMoeda = "9";
            string fatorVencimento = FatorVencimento(boleto).ToString();
{'fraction_non_alphanumeric': 0.13104287017330496, 'fraction_numerical': 0.036181210094253576, 'mean_word_length': 2.0317972350230415, 'pattern_counts': {'":': 0, '<': 18, '<?xml version=': 0, '>': 22, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1541755', 'n_tokens_mistral': 2468, 'n_tokens_neox': 2286, 'n_words': 486}