public void valida(string linha, int numLinha)
        {
            if (linha.Length != 240)
            {
                textoValidacao += ("Linha: " + numLinha + " Fora do Padrão: quantidade de colunas é difente de 240! esta linha possui: " + linha.Length + " colunas<br>");
            }
            else
            {
                try
                {
                    // Descrição do Registro “HEADER” de Lote - “1”
                    string tipoOperacao    = linha.Substring(8, 1);     //	1.04 009 009 X(001) Tipo de Operação
                    string tipoServico     = linha.Substring(9, 2);     //	1.05 010 011 9(002) Tipo de Serviço
                    string formaLancamento = linha.Substring(11, 2);    //	1.06 012 013 9(002) Forma de Lançamento
                    string verLayoutLote   = linha.Substring(13, 3);    //	1.07 014 016 9(003) Versão do leiaute do lote
                    string filler8         = linha.Substring(16, 1);    //	1.08 017 017 X(001) Filler
                    string tipoInscricao   = linha.Substring(17, 1);    //	1.09 018 018 9(001) Tipo de inscrição
                    string numInscricao    = linha.Substring(18, 14);   //	1.10 019 032 9(014) Número da inscrição
                    string codConvenio     = linha.Substring(32, 6);    //	1.11 033 038 9(006) Código Convênio no Banco
                    string tipoCompromisso = linha.Substring(38, 2);    //	1.12 039 040 9(002) Tipo de Compromisso

                    string codCompromisso   = linha.Substring(40, 4);   //	1.13 041 044 9(004) Código do compromisso
                    string paramTrans       = linha.Substring(44, 2);   //	1.14 045 046 X(002) Parâmetro de transmissão
                    string filler15         = linha.Substring(46, 6);   //	1.15 047 052 X(006) Filler
                    string agContaCorrente  = linha.Substring(52, 5);   //	1.16 053 057 9(005) Agencia da Conta Corrente
                    string dvAgencia        = linha.Substring(57, 1);   //	1.17 058 058 X(001) DV da Agência
                    string numContaCorrente = linha.Substring(58, 12);  //	1.18 059 070 9(012) Número da Conta Corrente
                    string DvContaCorrente  = linha.Substring(70, 1);   //	1.19 071 071 X(001) DV da Conta Corrente
                    string digAgConta       = linha.Substring(71, 1);   //	1.20 072 072 X(001) Dígito da Agência/Conta
                    string nomeEmpresa      = linha.Substring(72, 30);  //	1.21 073 102 X(030) Nome da Empresa
                    string msgAviso1        = linha.Substring(102, 40); //	1.22 103 142 X(040) Mensagem de Aviso 1

                    string logradouro     = linha.Substring(142, 30);   //	1.23 143 172 X(030) Logradouro
                    string numLocal       = linha.Substring(172, 5);    //	1.24 173 177 9(005) Número no local
                    string complemento    = linha.Substring(177, 15);   //	1.25 178 192 X(015) Complemento
                    string cidade         = linha.Substring(192, 20);   //	1.26 193 212 X(020) Cidade
                    string cep            = linha.Substring(212, 5);    //	1.27 213 217 9(005) CEP
                    string complementoCep = linha.Substring(217, 3);    //	1.28 218 220 X(003) Complemento CEP
                    string siglaEstado    = linha.Substring(220, 2);    //	1.29 221 222 X(002) Sigla do Estado
                    string usoFebraban    = linha.Substring(222, 8);    //	1.30 223 230 X(008) Uso exclusivo FEBRABAN
                    string ocorrencias    = linha.Substring(230, 10);   //	1.31 231 240 X(010) Ocorrências

                    switch (tipoOperacao)
                    {
                    case "C": break;

                    case "D": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: tipo de Operação = " + tipoOperacao + " : preencher com C (compromisso de pagamento) ou D (compromisso de recebimento)<br>");
                        break;
                    }

                    switch (tipoServico)
                    {
                    case "00": break;

                    case "05": break;

                    case "10": break;

                    case "20": break;

                    case "30": break;

                    case "50": break;

                    case "60": break;

                    case "70": break;

                    case "75": break;

                    case "80": break;

                    case "90": break;

                    case "98": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: tipo de Serviço = " + tipoServico + " : preencher conforme tabela G025<br>");
                        break;
                    }

                    switch (formaLancamento)
                    {
                    case "01": break;

                    case "02": break;

                    case "03": break;

                    case "05": break;

                    case "10": break;

                    case "11": break;

                    case "30": break;

                    case "31": break;

                    case "41": break;

                    case "50": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: tipo de Serviço = " + formaLancamento + " : preencher conforme tabela G029<br>");
                        break;
                    }

                    if (!verLayoutLote.Contains("041"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: ver. do layout do lote = " + verLayoutLote + " : o pradão é 041<br>");
                    }

                    if (!filler8.Contains(" "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: filler 8 = " + filler8 + " : preencher com espaços<br>");
                    }

                    switch (tipoInscricao)
                    {
                    case "1": break;

                    case "2": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Num. Inscricao = " + tipoInscricao + " : preencher com 1 (pessoa física) ou 2 (pessoa jurídica)<br>");
                        break;
                    }


                    try
                    {
                        long.Parse(numInscricao);
                    }
                    catch (Exception erro)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Num. Inscricao = " + linha.Substring(18, 32) + " : preencher com CPF ou CNPJ" + erro);
                    }

                    try
                    {
                        int.Parse(codConvenio);
                    }
                    catch (Exception erro)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Cod. Convênio = " + linha.Substring(32, 38) + " : preencher com o código do convênio informado pelo Banco" + erro);
                    }

                    switch (tipoCompromisso)
                    {
                    case "01": break;

                    case "02": break;

                    case "03": break;

                    case "06": break;

                    case "11": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: tipo de compromisso = " + tipoCompromisso + " : preencher com o tipo de compromisso:<br>");
                        textoValidacao      += ("Linha: " + numLinha + "  >>>>  01 (Pag. Fornecedor), 02 (Pag. Salários), 03 (Autopagamento), 06 (Salário Ampliação de Base), 11 (Débito em conta) <br>");
                        break;
                    }

                    try
                    {
                        int.Parse(codCompromisso);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Cod. compromisso = " + codCompromisso + " : preencher com o código do compromisso informado pelo Banco<br>");
                    }

                    if (paramTrans.Contains("  "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: param. de Transmissão = " + paramTrans + " : está em branco! preencher com o código informado pelo Banco<br>");
                    }

                    if (!filler15.Contains("      "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: filler 15 = " + filler15 + " : preencher com espaços<br>");
                    }

                    try
                    {
                        int.Parse(agContaCorrente);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: ag. conta corrente = " + agContaCorrente + " : preencher com a agência da conta<br>");
                    }

                    if (dvAgencia.Contains(" "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: DV. da agência = " + dvAgencia + " : está em branco! preencher com DV. da agência<br>");
                    }

                    try
                    {
                        long.Parse(numContaCorrente);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: num. da conta corrente = " + numContaCorrente + " : preencher com num. da conta corrente<br>");
                    }

                    if (DvContaCorrente.Contains(" "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: DV da Conta Corrente = " + DvContaCorrente + " : está em branco! preencher com DV da Conta Corrente<br>");
                    }

                    if (!digAgConta.Contains(" "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: dígito da Agência/Conta = " + digAgConta + " : preencher com espaços<br>");
                    }

                    if (nomeEmpresa.Contains("                              "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Nome da Empresa = " + nomeEmpresa + " : está em branco!<br>");
                    }

                    Auxiliar aux = new Auxiliar();
                    aux.apagaCaracterEspecial(numLinha, msgAviso1);

                    if (logradouro.Contains("                              "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Logradouro = " + logradouro + " : está em branco!<br>");
                    }

                    try
                    {
                        //int numLocalParse = int.Parse(numLocal.Trim());
                        //string.Format("%05d", int.Parse(numLocal.Trim())); // preenche com zero a esquerda
                        if (numLocal.Trim().Length < numLocal.Length)
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: Número no local = " + numLocal + " : preencher com o zero a esquerda<br>");
                        }
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Número no local = " + numLocal + " : preencher com o número no local<br>");
                    }

                    if (complemento.Contains("               "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Complemento = " + complemento + " : está em branco!<br>");
                    }

                    if (cidade.Contains("                    "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Cidade = " + cidade + " : está em branco!<br>");
                    }


                    try
                    {
                        //int.Parse(cep.Trim());
                        //string.Format("%05d", int.Parse(cep.Trim())); // preenche com zero a esquerda
                        if (cep.Trim().Length < cep.Length)
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: CEP = " + cep + " : preencher com o zero a esquerda<br>");
                        }
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: CEP = " + cep + " : preencher com o CEP<br>");
                    }

                    //if (cep.Contains("     "))
                    //{
                    //    textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Complemento do CEP = " + cep + " : está em branco!<br>");
                    //}

                    if (complementoCep.Contains("   "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Complemento do CEP = " + complementoCep + " : está em branco!<br>");
                    }

                    Auxiliar auxEstado = new Auxiliar();
                    auxEstado.validaEstado(numLinha, siglaEstado);

                    if (!usoFebraban.Contains("        "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Uso exclusivo FEBRABAN = " + usoFebraban + " : preencher com espaços<br>");
                    }

                    if (!ocorrencias.Contains("          "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Ocorrências = " + ocorrencias + " : preencher com espaços<br>");
                    }
                }
                catch (Exception erro)
                {
                    textoValidacao += ("Linha: " + numLinha + " não consegui ler a linha do registro 1 (HEADER LOTE) = " + linha + "Erro: " + erro);
                }
            }
        }
        public void validaRegistroJ(string linha, int numLinha)
        {
            if (linha.Length != 240)
            {
                textoValidacao += ("Linha: " + numLinha + " Fora do Padrão: quantidade de colunas é difente de 240! esta linha possui: " + linha.Length + " colunas<br>");
            }
            else
            {
                try
                {
                    // Descrição do Registro DETALHE - “J” (registro obrigatório)
                    string tipoMovimento  = linha.Substring(14, 1);        //J.06 015 015 9(001) Tipo Movimento
                    string codMovimento   = linha.Substring(15, 2);        //J.07 016 017 9(002) Cód. Movimento
                    string bancoDestino   = linha.Substring(17, 3);        //J.08 018 020 9(003) Banco destino
                    string codMoeda       = linha.Substring(20, 1);        //J.09 021 021 9(001) Cód. Moeda
                    string dvCodBarras    = linha.Substring(21, 1);        //J.10 022 022 9(001) DV Cód. Barras
                    string fatorVenc      = linha.Substring(22, 4);        //J.11 023 026 9(004) Fator de vencimento
                    string valorDocumento = linha.Substring(26, 8);        //J.12 027 036 9(008) v99 Valor do Documento
                    string campoLivre     = linha.Substring(36, 25);       //J.13 037 061 X(025) Campo Livre
                    string nomeCedente    = linha.Substring(61, 30);       //J.14 062 091 X(030) Nome do Cedente

                    string dataVencimento      = linha.Substring(91, 8);   //J.15 092 099 9(008) Data Vencimento
                    string valorTitulo         = linha.Substring(99, 15);  //J.16 100 114 9(015) v99 Valor do Título
                    string valorDesconto       = linha.Substring(114, 15); //J.17 115 129 9(013) v99 Valor do desconto + Abatimento
                    string valorMulta          = linha.Substring(129, 15); //J.18 130 144 9(013) v99 Valor da mora + multa
                    string dataPagamento       = linha.Substring(144, 8);  //J.19 145 152 9(008) Data do Pagamento
                    string valorPagamento      = linha.Substring(152, 15); //J.20 153 167 9(015)v99 Valor Pagamento
                    string quantidadeMoeda     = linha.Substring(167, 10); //J.21 168 182 9(010)v99999 Quantidade Moeda
                    string numDocumentoEmpresa = linha.Substring(182, 6);  //J.22 183 188 X(006) Número documento atribuído pela empresa
                    string filler23            = linha.Substring(188, 14); //J.23 189 202 X(014) Filler - preencher com espaço.
                    string numDocumentoBanco   = linha.Substring(202, 9);  //J.24 203 211 9(009) Número documento atribuído pelo banco

                    string filler25           = linha.Substring(211, 11);  //J.25 212 222 X(011) Filler
                    string codigoDaMoeda      = linha.Substring(222, 2);   //J.26 223 224 9(002) Código da Moeda = 04(TRD) ou 02(Dólar) ou 06(UFIR diária) ou 09(Real)
                    string usoFebraban        = linha.Substring(224, 6);   //J.27 225 230 X(006) Uso FEBRABAN
                    string ocorrenciasRetorno = linha.Substring(230, 10);  //J.28 231 240 X(010) Ocorrências do Retorno

                    switch (tipoMovimento)
                    {
                    case "0": break;

                    case "9": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: tipo de Movimento = " + tipoMovimento + " : preencher com “0” (inclusão) ou “9” (exclusão)<br>");
                        break;
                    }

                    switch (codMovimento)
                    {
                    case "00": break;

                    case "09": break;

                    case "10": break;

                    case "11": break;

                    case "23": break;

                    case "99": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: cod. de Movimento = " + codMovimento + " : preencher conforme tabela G061<br>");
                        break;
                    }

                    Auxiliar auxBancoDestino = new Auxiliar();
                    auxBancoDestino.validaCodBanco(numLinha, bancoDestino);
                    textoValidacao += auxBancoDestino.TextoValidacao;

                    try
                    {
                        int.Parse(codMoeda);
                        switch (codMoeda)
                        {
                        case "0": break;

                        case "9": break;

                        default: textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Cod. moeda = " + codMoeda + " : Está diferente do padrão FEBRABAN<br>");
                            break;
                        }
                    }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Cod. codMoeda = " + codMoeda + " :  preencher com o código da moeda conforme constante da 4a posição na barra da cobrança = 9(Real) ou 2(Moeda Variável)" + erro); }

                    try { int.Parse(dvCodBarras); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: DV Cod. Barra = " + dvCodBarras + " : preencher conforme código de barras, constante da 5a posição da barra da cobrança" + erro); }

                    try { int.Parse(fatorVenc); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: fator de Vencimento = " + fatorVenc + " : preencher com o fator de vencimento constante da 6a a 9a posição da barra da cobrança" + erro); }

                    try { int.Parse(valorDocumento); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor do Documento = " + valorDocumento + " : Preencher conforme constante da 10a a 19a posições da barra da cobrança" + erro); }

                    if (campoLivre.Contains("                         "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Campo Livre = " + campoLivre + " : está em branco! preencher conforme constante da 20a a 44a posições na barra da cobrança<br>");
                    }

                    if (nomeCedente.Contains("                              "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Nome do Cedente = " + nomeCedente + " : está em branco! preencher com Nome do Cedente<br>");
                    }

                    try { int.Parse(dataVencimento); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Data de Vencimento = " + dataVencimento + " : preencher com a data de vencimento do bloqueto" + erro); }

                    try { int.Parse(valorDesconto); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor do Desconto = " + valorDesconto + " : preencher se for o caso" + erro); }

                    try { int.Parse(valorMulta); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor da mora + multa = " + valorMulta + " : Válido somente para bloquetos da CAIXA, bloquetos de outros bancos não podem ser pagos em atraso" + erro); }

                    try { int.Parse(dataPagamento); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Data do Pagamento = " + dataPagamento + " : Mensagem: " + erro); }

                    try { int.Parse(valorPagamento); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor Pagamento = " + valorPagamento + " : Mensagem: " + erro); }

                    try { int.Parse(quantidadeMoeda); }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Quantidade Moeda = " + quantidadeMoeda + " : preencher com a quantidade de moeda para pagamentos a serem realizados com moeda variável " + erro); }

                    if (numDocumentoEmpresa.Contains("      "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Número documento atribuído pela empresa = " + numDocumentoEmpresa + " : está em branco!<br>");
                    }

                    if (!filler23.Contains("              "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Filler = " + filler23 + " : preencher com espaços!<br>");
                    }

                    if (!numDocumentoBanco.Contains("         "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Número documento atribuído pelo banco = " + numDocumentoBanco + " : preencher com espaços!<br>");
                    }

                    if (!filler25.Contains("           "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Filler = " + filler25 + " : preencher com espaços!<br>");
                    }

                    try
                    {
                        int.Parse(codigoDaMoeda);
                        switch (codigoDaMoeda)
                        {
                        case "02": break;

                        case "04": break;

                        case "06": break;

                        case "09": break;

                        default: textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Código da Moeda = " + codigoDaMoeda + " : Está diferente do padrão FEBRABAN<br>");
                            break;
                        }
                    }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Código da Moeda = " + codigoDaMoeda + " : Mensagem: " + erro); }

                    if (!usoFebraban.Contains("      "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Uso FEBRABAN = " + usoFebraban + " : preencher com espaços!<br>");
                    }

                    if (!ocorrenciasRetorno.Contains("          "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Ocorrências do Retorno = " + ocorrenciasRetorno + " : preencher com espaços!<br>");
                    }
                }
                catch (Exception erro)
                {
                    textoValidacao += ("Linha: " + numLinha + " não consegui ler a linha do registro J = " + linha + "<br>" + erro);
                }
            }
        }
        internal void validaRegistroB(string linha, int numLinha)
        {
            if (linha.Length != 240)
            {
                textoValidacao += ("Linha: " + numLinha + " Fora do Padrão: quantidade de colunas é difente de 240! esta linha possui: " + linha.Length + " colunas<br>");
            }
            else
            {
                try
                {
                    string usoFebraban      = linha.Substring(14, 3);   // B.06 015 017 X(003) Uso FEBRABAN - preencher com espaços
                    string tipoInscricao    = linha.Substring(17, 1);   // B.07 018 018 9(001) Tipo Inscrição - “1” = quando CPF (pessoa física) “2” = quando CNPJ (pessoa jurídica)
                    string numInscricao     = linha.Substring(18, 14);  // B.08 019 032 9(014) Número Inscrição - preencher com o número do CPF quando no campo B.07 for preenchido com “1” ou o número do CNPJ quando no campo B.07 for preenchido com “2”
                    string logradouro       = linha.Substring(32, 30);  // B.09 033 062 X(030) Logradouro - preencher com o nome da Rua, Avenida, Alameda
                    string numLocal         = linha.Substring(62, 5);   // B.10 063 067 9(005) Número no local - preencher com número do endereço
                    string complemento      = linha.Substring(67, 15);  // B.11 068 082 X(015) Complemento - preencher com o complemento do endereço
                    string bairro           = linha.Substring(82, 15);  // B.12 083 097 X(015) Bairro - preencher com o bairro do endereço
                    string cidade           = linha.Substring(97, 20);  // B.13 098 117 X(020) Cidade - preencher com cidade do endereço
                    string cep              = linha.Substring(117, 5);  // B.14 118 122 9(005) CEP - Código de Endereçamento Postal
                    string complementoCep   = linha.Substring(122, 3);  // B.15 123 125 X(003) Complemento CEP - complemento do Código de Endereçamento Postal
                    string siglaEstado      = linha.Substring(125, 2);  // B.16 126 127 X(002) UF do Estado
                    string dataVencimento   = linha.Substring(127, 8);  // B.17 128 135 9(008) Data do Vencimento
                    string valorDocumento   = linha.Substring(135, 15); // B.18 136 150 9(015) V99 Valor do Documento - preencher com zeros
                    string valorAbatimento  = linha.Substring(150, 15); // B.19 151 165 9(015) V99 Valor do Abatimento - preencher com zeros
                    string valorDesconto    = linha.Substring(165, 15); // B.20 166 180 9(015) V99 Valor do Desconto - preencher com zeros
                    string valorMora        = linha.Substring(180, 15); // B.21 181 195 9(015) V99 Valor da Mora - preencher com zeros
                    string valorMulta       = linha.Substring(195, 15); // B.22 196 210 9(015) V99 Valor da Multa - preencher com zeros
                    string codDocfavorecido = linha.Substring(210, 15); // B.23 211 225 X(015) Código Documento Favorecido - preencher com espaços. Quando o campo 1.06 for “10” – OP, preencher com o nº do favorecido. Nos demais casos, preencher com espaços
                    string usoFebraban2     = linha.Substring(225, 15); // B.24 226 240 X(015) Uso da FEBRABAN - preencher com espaço

                    if (!usoFebraban.Contains("   "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Uso FEBRABAN = " + usoFebraban + " : preencher com espaços!<br>");
                    }

                    switch (tipoInscricao)
                    {
                    case "1": break;

                    case "2": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Num. Inscricao = " + tipoInscricao + " : preencher com 1 (pessoa física) ou 2 (pessoa jurídica)<br>");
                        break;
                    }

                    try
                    {
                        long.Parse(numInscricao);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Num. Inscricao = " + numInscricao + " : preencher com CPF ou CNPJ<br>");
                    }


                    if (logradouro.Contains("                              "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Logradouro = " + logradouro + " : está em branco!<br>");
                    }

                    try
                    {
                        if (numLocal.Trim().Length < numLocal.Length)
                        {
                            if (numLocal.Trim().Length < 1)
                            {
                                textoValidacao += ("Linha: " + numLinha + " Erro no campo: Número no local = " + numLocal + " : favor preencher - Exemplo: 00007 <br>");
                            }
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: Número no local = " + numLocal + " : preencher com o zero a esquerda<br>");
                        }
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Número no local = " + numLocal + " : preencher com o número no local<br>");
                    }

                    if (complemento.Contains("               "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Complemento = " + complemento + " : está em branco!<br>");
                    }

                    if (bairro.Contains("               "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Bairro = " + logradouro + " : está em branco!<br>");
                    }

                    if (cidade.Contains("                    "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Cidade = " + cidade + " : está em branco!<br>");
                    }

                    if (cep.Trim().Length < cep.Length)
                    {
                        if (cep.Trim().Length < 1)
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: CEP = " + cep + " : preencher com o zero a esquerda<br>");
                        }
                        else
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: CEP = " + cep + " : preencher com o zero a esquerda<br>");
                        }
                    }

                    if (cep.Contains("   "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Complemento do CEP = " + cep + " : está em branco!<br>");
                    }

                    if (complementoCep.Trim().Length < complementoCep.Length)
                    {
                        if (complementoCep.Trim().Length < 1)
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: CEP = " + complementoCep + " : preencher com o zero a esquerda<br>");
                        }
                        else
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: CEP = " + complementoCep + " : preencher com o zero a esquerda<br>");
                        }
                    }

                    if (complementoCep.Contains("   "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Complemento do CEP = " + complementoCep + " : está em branco!<br>");
                    }

                    Auxiliar auxEstado = new Auxiliar();
                    auxEstado.validaEstado(numLinha, siglaEstado);
                    textoValidacao += auxEstado.TextoValidacao;

                    try
                    {
                        DateTime dataVenc = DateTime.ParseExact(dataVencimento, "ddMMyyyy", CultureInfo.InvariantCulture);
                        if (dataVenc < (DateTime.Now.AddDays(-1)))
                        {
                            textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Data de Vencimento = " + dataVencimento + " : já está vencida!<br>");
                        }
                    }
                    catch (Exception erro) { textoValidacao += ("Linha: " + numLinha + " Erro no campo: Data de Vencimento = " + dataVencimento + " : preencher com a data de vencimento<br>"); }
                    //faz o resto logo!!

                    if (!valorDocumento.Contains("000000000000000"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor do Documento = " + valorDocumento + " : preencher com zeros!<br>");
                    }

                    if (!valorAbatimento.Contains("000000000000000"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor do Abatimento = " + valorAbatimento + " : preencher com zeros!<br>");
                    }

                    if (!valorDesconto.Contains("000000000000000"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor do Desconto = " + valorDesconto + " : preencher com zeros!<br>");
                    }

                    if (!valorMora.Contains("000000000000000"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor da Mora = " + valorMora + " : preencher com zeros!<br>");
                    }

                    if (!valorMulta.Contains("000000000000000"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor da Multa = " + valorMulta + " : preencher com zeros!<br>");
                    }

                    //faz essa função logo!!
                    // codDocfavorecido = linha.Substring(210, 15); // B.23 211 225 X(015) Código Documento Favorecido - preencher com espaços.
                    // Quando o campo 1.06 for “10” – OP, preencher com o nº do favorecido. Nos demais casos, preencher com espaços

                    if (!usoFebraban2.Contains("               "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Uso FEBRABAN = " + usoFebraban + " : preencher com espaços!<br>");
                    }
                }
                catch (Exception erro)
                {
                    textoValidacao += ("Linha: " + numLinha + " não consegui ler a linha do registro J = " + linha + "<br>" + erro);
                }
            }
        }
        public String lerRetornoCnab240(Stream arquivo)
        {
            string linha, linhaHeaderRetorno = "", linhaTraillerRetorno = "", linhaHeaderLote = "", linhaTraillerLote = "", mensagemValidacao = "";
            int    contadorLinhas = 0, contadorHeaderRetorno = 0, contadorTraillerRetorno = 0, contadorHeaderLote = 0, contadorTraillerLote = 0, quantPagamento = 0;
            int    numNsr = 1, numLote = 1, campoQuantRegLote = 0, quantRegLote = 2;
            long   somaValorPagamento = 0, campoSomaValorPagamento = 0, campoSomaQuantMoeda = 0, somaQuantMoeda = 0;

            //StreamWriter sw = new StreamWriter(caminhoLogValidacao + "\\validacao.log", true, UTF8Encoding.UTF8);

            try
            {
                // construtor que recebe o objeto do tipo arquivo
                StreamReader sr = new StreamReader(arquivo);

                // emquanto houver linhas
                while (((linha = sr.ReadLine()) != null))
                {
                    contadorLinhas++;
                    if (linha.Length > 7)
                    {
                        string codBanco = linha.Substring(0, 3);
                        if (!codBanco.Contains("104"))
                        {
                            mensagemValidacao += ("Erro no campo: Código do Banco = " + codBanco + " : código pradão é 104<br>");
                        }

                        string codRegistro = linha.Substring(7, 1);
                        switch (codRegistro)
                        {
                        case "0":
                            linhaHeaderRetorno = linha;
                            //mensagemValidacao += ("Linha: " + contadorLinhas + ": Validando registro do Tipo: 0 (Header Retorno)...<br>");
                            contadorHeaderRetorno++;

                            mensagemValidacao += ("Nome da Empresa: " + linhaHeaderRetorno.Substring(72, 30) + "<br>");
                            if (linha.Substring(17, 1).Contains("1"))
                            {
                                mensagemValidacao += ("CPF: " + linhaHeaderRetorno.Substring(18, 14) + "<br>");
                            }
                            if (linha.Substring(17, 1).Contains("2"))
                            {
                                mensagemValidacao += ("CNPJ: " + linhaHeaderRetorno.Substring(18, 14) + "<br>");
                            }
                            mensagemValidacao += ("Convênio: " + linhaHeaderRetorno.Substring(32, 6) + "<br>NSA: " + linhaHeaderRetorno.Substring(157, 6) + "<br><br>");
                            break;

                        case "1":
                            linhaHeaderLote = linha;
                            //mensagemValidacao += ("Linha: " + contadorLinhas + ": Validando registro do Tipo: 1 (Header Lote)...<br>");

                            Auxiliar auxLoteHeader = new Auxiliar();
                            auxLoteHeader.validaNumeroLotes(contadorLinhas, linha, numLote);
                            mensagemValidacao += auxLoteHeader.TextoValidacao;

                            contadorHeaderLote++;
                            break;

                        case "3":

                            if (linha.Substring(13, 1).Equals("A", StringComparison.InvariantCultureIgnoreCase))
                            {
                                mensagemValidacao += ("Linha: " + contadorLinhas + ": Pagamento do tipo: A...<br>");

                                Auxiliar aux = new Auxiliar();
                                aux.validaNumeroLotes(contadorLinhas, linha, numLote);
                                aux.validaNsr(contadorLinhas, linha, numNsr);
                                mensagemValidacao += aux.TextoValidacao;

                                quantRegLote++;
                                quantPagamento++;
                                somaValorPagamento += long.Parse(linha.Substring(119, 15));
                                somaQuantMoeda     += long.Parse(linha.Substring(114, 10));

                                string codBancoDestino        = linha.Substring(20, 3);   // A.09 021 023 9(003) Código Banco de Destino
                                string codAgenciaDestino      = linha.Substring(23, 5);   // A.10 024 028 9(005) Código da Agência de Destino
                                string dvAgenciaDestino       = linha.Substring(28, 1);   // A.11 029 029 X(001) DV Agência de Destino
                                string contaCorrenteDestino   = linha.Substring(29, 12);  // A.12 030 041 9(012) Conta Corrente Destino
                                string dvContaDestino         = linha.Substring(41, 1);   // A.13 042 042 X(001) DV Conta Destino
                                string dvAgenciaContaDestino  = linha.Substring(42, 1);   // A.14 043 043 X(001) DV Agência/Conta Destino
                                string nomeFavorecido         = linha.Substring(43, 30);  // A.15 044 073 X(030) Nome do terceiro - favorecido
                                string numDocAtribuidoEmpresa = linha.Substring(73, 6);   // A.16 074 079 9(006) Número do Documento Atribuído pela Empresa
                                string dataVencimento         = linha.Substring(93, 8);   // A.19 094 101 9(008) Data de vencimento
                                string valorLancamento        = linha.Substring(119, 15); // A.22 120 134 9(015) Valor do Lançamento
                                string ocorrencias            = linha.Substring(230, 10); // A.36 231 240 X(010) Ocorrências - preencher com espaços

                                valorLancamento    = aux.converteEmMoeda(contadorLinhas, linha, valorLancamento);
                                ocorrencias        = aux.TrataOcorencias(ocorrencias);
                                mensagemValidacao += (" - Banco: " + codBancoDestino + " - Ag: " + codAgenciaDestino + "-" + dvAgenciaDestino + " - Cta: " + contaCorrenteDestino + "-" + dvAgenciaDestino + "-" + dvAgenciaContaDestino + "<br> - Favorecido: " + nomeFavorecido + "<br> - Numero do Documento: " + numDocAtribuidoEmpresa + " - Vencimento: " + dataVencimento + " - Valor: " + valorLancamento + "<br> - Ocorrências: " + ocorrencias + "<br>");
                            }

                            if (linha.Substring(13, 1).Equals("B", StringComparison.InvariantCultureIgnoreCase))
                            {
                                //mensagemValidacao +=("Linha: " + contadorLinhas + ": Pagamento do tipo: B...<br>");
                                //Auxiliar auxLoteSeg = new Auxiliar();
                                //auxLoteSeg.validaNumeroLotes(contadorLinhas, linha, numLote, mensagemValidacao);
                                //auxLoteSeg.validaNsr(contadorLinhas, linha, numNsr, mensagemValidacao);
                                quantRegLote++;
                                //RegistroB regB = new RegistroB();
                                //regB.validaRegistroB(linha, contadorLinhas, mensagemValidacao);
                            }

                            if (linha.Substring(13, 1).Equals("J", StringComparison.InvariantCultureIgnoreCase))
                            {
                                mensagemValidacao += ("Linha: " + contadorLinhas + ": Pagamento do tipo: J...<br>");

                                Auxiliar aux = new Auxiliar();
                                aux.validaNumeroLotes(contadorLinhas, linha, numLote);
                                aux.validaNsr(contadorLinhas, linha, numNsr);
                                mensagemValidacao += aux.TextoValidacao;

                                quantRegLote++;
                                quantPagamento++;
                                somaValorPagamento += long.Parse(linha.Substring(152, 15));
                                somaQuantMoeda     += long.Parse(linha.Substring(167, 10));

                                string bancoDestino        = linha.Substring(17, 3);   //J.08 018 020 9(003) Banco destino
                                string nomeCedente         = linha.Substring(61, 30);  //J.14 062 091 X(030) Nome do Cedente
                                string dataVencimento      = linha.Substring(91, 8);   //J.15 092 099 9(008) Data Vencimento
                                string valorPagamento      = linha.Substring(152, 15); //J.20 153 167 9(015)v99 Valor Pagamento
                                string numDocumentoEmpresa = linha.Substring(182, 6);  //J.22 183 188 X(006) Número documento atribuído pela empresa
                                string ocorrencias         = linha.Substring(230, 10); //J.28 231 240 X(010) Ocorrências do Retorno

                                valorPagamento     = aux.converteEmMoeda(contadorLinhas, linha, valorPagamento);
                                ocorrencias        = aux.TrataOcorencias(ocorrencias);
                                mensagemValidacao += (" - Banco: " + bancoDestino + " - Cedente: " + nomeCedente + " - Numero do Documento: " + numDocumentoEmpresa + " - Vencimento: " + dataVencimento + " - Valor: " + valorPagamento + "<br> - Ocorrências: " + ocorrencias + "<br>");
                            }

                            if (linha.Substring(13, 1).Equals("K", StringComparison.InvariantCultureIgnoreCase))
                            {
                                mensagemValidacao += ("Linha: " + contadorLinhas + ": Pagamento do Tipo: K...<br>");

                                Auxiliar aux = new Auxiliar();
                                aux.validaNumeroLotes(contadorLinhas, linha, numLote);
                                aux.validaNsr(contadorLinhas, linha, numNsr);
                                mensagemValidacao += aux.TextoValidacao;

                                quantRegLote++;
                                quantPagamento++;
                                somaValorPagamento += long.Parse(linha.Substring(119, 15));
                                somaQuantMoeda      = long.Parse(linha.Substring(114, 10));

                                string codSegmentoEmpresa = linha.Substring(18, 1);   //K. 019 019 9(001) Código Segmento Empresa
                                string numDocEmpresa      = linha.Substring(73, 6);   //K. 074 079 X(006) Número do documento na Empresa
                                string dataLancamento     = linha.Substring(93, 8);   //K. 094 101 9(008) Data Lançamento
                                string valorLancamento    = linha.Substring(119, 15); //K. 120 134 9(015) v99 Valor Lançamento
                                string dataEfetivacao     = linha.Substring(154, 8);  //K. 155 162 9(008) Data da efetivação
                                string ocorrencias        = linha.Substring(230, 10); //K. 231 240 X(010) Ocorrências para retorno

                                valorLancamento    = aux.converteEmMoeda(contadorLinhas, linha, valorLancamento);
                                ocorrencias        = aux.TrataOcorencias(ocorrencias);
                                codSegmentoEmpresa = aux.SegmentoEmpresa(codSegmentoEmpresa);
                                mensagemValidacao += (" - Segmento empresa: " + codSegmentoEmpresa + " - Numero do Documento: " + numDocEmpresa + "<br> - Data: " + dataLancamento + " - Valor: " + valorLancamento + "<br> - Ocorrências: " + ocorrencias + "<br>");
                            }
                            numNsr++;
                            break;

                        case "5":
                            linhaTraillerLote = linha;
                            //mensagemValidacao += ("Linha: " + contadorLinhas + ": Validando registro do Tipo: 5 (Trailler Lote)...<br>");
                            try
                            {
                                campoQuantRegLote       = int.Parse(linha.Substring(17, 6));
                                campoSomaValorPagamento = long.Parse(linha.Substring(23, 18));
                                campoSomaQuantMoeda     = long.Parse(linha.Substring(41, 15));

                                if (campoQuantRegLote != quantRegLote)
                                {
                                    mensagemValidacao += ("Linha: " + contadorLinhas + " Erro no campo: Somatório de registros do lote: " + campoQuantRegLote + " A soma dos registros neste lote é: " + quantRegLote + "<br>");
                                }

                                if (campoSomaValorPagamento != somaValorPagamento)
                                {
                                    Auxiliar aux = new Auxiliar();
                                    string   campoSomaValorPag = aux.converteEmMoeda(contadorLinhas, linha, campoSomaValorPagamento.ToString());
                                    string   somaValorPag      = aux.converteEmMoeda(contadorLinhas, linha, somaValorPagamento.ToString());
                                    mensagemValidacao += ("Linha: " + contadorLinhas + " Erro no campo: Somatório de valores: " + campoSomaValorPag + " A soma dos valores neste lote é: " + somaValorPag + "<br>");
                                }

                                if (campoSomaQuantMoeda != somaQuantMoeda)
                                {
                                    mensagemValidacao += ("Linha: " + contadorLinhas + " Erro no campo: Somatório de quantidade moeda: " + campoSomaQuantMoeda + " A soma de quantidade moeda neste lote é: " + somaQuantMoeda + "<br>");
                                }
                            }
                            catch (Exception erro)
                            {
                                mensagemValidacao += ("Linha: " + contadorLinhas + " Erro na formatação do registro do Tipo: 5 (Trailler Lote)...<br>" + erro + "<br>");
                            }
                            quantRegLote       = 2;
                            somaQuantMoeda     = 0;
                            somaValorPagamento = 0;

                            contadorTraillerLote++;
                            numNsr = 1;
                            numLote++;
                            break;

                        case "9":
                            linhaTraillerRetorno = linha;
                            //mensagemValidacao += ("Linha: " + contadorLinhas + ": Validando registro do Tipo: 9 (Trailler Retorno)...<br>");
                            try
                            {
                                int quantRegistrosArq = int.Parse(linhaTraillerRetorno.Substring(23, 6));
                                if (contadorLinhas != quantRegistrosArq)
                                {
                                    mensagemValidacao += ("Linha: " + contadorLinhas + " Erro no campo: Quantidade de Registros do Arquivo: " + quantRegistrosArq + " A soma de linhas neste arquivo é: " + contadorLinhas + "<br>");
                                }
                            }
                            catch (Exception erro)
                            {
                                mensagemValidacao += ("Linha: " + contadorLinhas + " Erro na formatação do registro do Tipo: 9 (Trailler Retorno)...<br>" + erro + "<br>");
                            }
                            contadorTraillerRetorno++;
                            break;

                        default:
                            mensagemValidacao += ("Linha: " + contadorLinhas + ": Não foi possível identificar a linha: " + linha + "<br>");
                            break;
                        }
                    }
                    else
                    {
                        mensagemValidacao += ("Linha: " + contadorLinhas + ": Não foi possível identificar a linha: " + linha + "<br>");
                    }
                } // fecha o laço while
                sr.Close(); //fecha o StreamReader
            }
            catch (IOException ex)
            {
                mensagemValidacao += ("Linha: " + contadorLinhas + " Ocorreu um erro ao ler o arquivo: " + ex + "<br>");
            }
            catch (FormatException ex)
            {
                mensagemValidacao += ("Linha: " + contadorLinhas + " Ocorreu um erro ao ler o arquivo: " + ex + "<br>");
            }

            if (contadorHeaderRetorno - contadorTraillerRetorno == 0)
            {
                mensagemValidacao += ("<br>Quantidade de lotes: " + contadorHeaderLote + "<br>Quantidade de pagamentos: " + quantPagamento + "<br>Quantidade de linhas lidas: " + contadorLinhas + "<br><br>");
            }
            else
            {
                mensagemValidacao += ("<br>Problema com HEADER ou TRAILLER da Retorno!<br>Quant. Header: " + contadorHeaderRetorno + "<br>Quant. Trailler: " + contadorTraillerRetorno + "<br><br>");
            }
            return(mensagemValidacao);
        }
        public String lerRemessaCnab240(Stream arquivo)
        {
            string linha, linhaHeaderRemessa = "", linhaTraillerRemessa = "", linhaHeaderLote = "", linhaTraillerLote = "", mensagemValidacao = "";
            int    contadorLinhas = 0, contadorHeaderRemessa = 0, contadorTraillerRemessa = 0, contadorHeaderLote = 0, contadorTraillerLote = 0, quantPagamento = 0;
            int    numNsr = 1, numLote = 1, campoQuantRegLote = 0, quantRegLote = 2, quantLote = 0;
            long   somaValorPagamento = 0, campoSomaValorPagamento = 0, campoSomaQuantMoeda = 0, somaQuantMoeda = 0;

            try
            {
                // construtor que recebe o objeto do tipo arquivo
                StreamReader sr = new StreamReader(arquivo);

                // emquanto houver linhas
                while (((linha = sr.ReadLine()) != null))
                {
                    contadorLinhas++;
                    if (linha.Length > 7)
                    {
                        string codBanco = linha.Substring(0, 3);
                        if (!codBanco.Contains("104"))
                        {
                            mensagemValidacao += ("Erro no campo: Código do Banco = " + codBanco + " : código pradão é 104<br>");
                        }

                        string codRegistro = linha.Substring(7, 1);
                        switch (codRegistro)
                        {
                        case "0":
                            linhaHeaderRemessa = linha;
                            //mensagemValidacao += ("Linha: " + contadorLinhas + ": Validando registro do Tipo: 0 (Header Remessa)...<br>");
                            Registro0 validaReg0 = new Registro0( );
                            validaReg0.valida(linha, contadorLinhas, mensagemValidacao);
                            mensagemValidacao = validaReg0.TextoValidacao;
                            contadorHeaderRemessa++;

                            mensagemValidacao += ("Nome da Empresa: " + linhaHeaderRemessa.Substring(72, 30) + "<br>");
                            if (linha.Substring(17, 1).Contains("1"))
                            {
                                mensagemValidacao += ("CPF: " + linhaHeaderRemessa.Substring(18, 14) + "<br>");
                            }
                            if (linha.Substring(17, 1).Contains("2"))
                            {
                                mensagemValidacao += ("CNPJ: " + linhaHeaderRemessa.Substring(18, 14) + "<br>");
                            }
                            mensagemValidacao += ("Convênio: " + linhaHeaderRemessa.Substring(32, 6) + "<br>NSA: " + linhaHeaderRemessa.Substring(157, 6) + "<br><br>");
                            break;

                        case "1":
                            linhaHeaderLote = linha;
                            //mensagemValidacao +=("Linha: " + contadorLinhas + ": Validando registro do Tipo: 1 (Header Lote)...<br>");

                            Auxiliar auxLoteHeader = new Auxiliar();
                            auxLoteHeader.validaNumeroLotes(contadorLinhas, linha, numLote);
                            mensagemValidacao += auxLoteHeader.TextoValidacao;

                            Registro1 validaReg1 = new Registro1();
                            validaReg1.valida(linha, contadorLinhas);
                            mensagemValidacao += validaReg1.TextoValidacao;
                            contadorHeaderLote++;
                            break;

                        case "3":
                            if (linha.Substring(13, 1).Equals("A", StringComparison.InvariantCultureIgnoreCase))
                            {
                                //mensagemValidacao +=("Linha: " + contadorLinhas + ": Validando registro do Tipo: A...<br>");

                                Auxiliar auxLoteSeg = new Auxiliar();
                                auxLoteSeg.validaNumeroLotes(contadorLinhas, linha, numLote);
                                auxLoteSeg.validaNsr(contadorLinhas, linha, numNsr);
                                mensagemValidacao += auxLoteSeg.TextoValidacao;

                                quantRegLote++;
                                quantPagamento++;
                                somaValorPagamento += long.Parse(linha.Substring(119, 15));
                                somaQuantMoeda     += long.Parse(linha.Substring(114, 10));

                                RegistroA regA = new RegistroA();
                                regA.validaRegistroA(linha, contadorLinhas);
                                mensagemValidacao += regA.TextoValidacao;
                            }
                            if (linha.Substring(13, 1).Equals("B", StringComparison.InvariantCultureIgnoreCase))
                            {
                                //mensagemValidacao +=("Linha: " + contadorLinhas + ": Validando registro do Tipo: B...<br>");

                                Auxiliar auxLoteSeg = new Auxiliar();
                                auxLoteSeg.validaNumeroLotes(contadorLinhas, linha, numLote);
                                auxLoteSeg.validaNsr(contadorLinhas, linha, numNsr);
                                mensagemValidacao += auxLoteSeg.TextoValidacao;

                                quantRegLote++;
                                RegistroB regB = new RegistroB();
                                regB.validaRegistroB(linha, contadorLinhas);
                                mensagemValidacao += regB.TextoValidacao;
                            }
                            if (linha.Substring(13, 1).Equals("J", StringComparison.InvariantCultureIgnoreCase))
                            {
                                //mensagemValidacao +=("Linha: " + contadorLinhas + ": Validando registro do Tipo: J...<br>");

                                Auxiliar auxLoteSeg = new Auxiliar();
                                auxLoteSeg.validaNumeroLotes(contadorLinhas, linha, numLote);
                                auxLoteSeg.validaNsr(contadorLinhas, linha, numNsr);
                                mensagemValidacao += auxLoteSeg.TextoValidacao;

                                quantRegLote++;
                                quantPagamento++;
                                somaValorPagamento += long.Parse(linha.Substring(152, 15));
                                somaQuantMoeda     += long.Parse(linha.Substring(167, 10));

                                RegistroJ regJ = new RegistroJ();
                                regJ.validaRegistroJ(linha, contadorLinhas);
                                mensagemValidacao += regJ.TextoValidacao;
                            }
                            if (linha.Substring(13, 1).Equals("K", StringComparison.InvariantCultureIgnoreCase))
                            {
                                //mensagemValidacao +=("Linha: " + contadorLinhas + ": Validando registro do Tipo: K...<br>");

                                Auxiliar auxLoteSeg = new Auxiliar();
                                auxLoteSeg.validaNumeroLotes(contadorLinhas, linha, numLote);
                                auxLoteSeg.validaNsr(contadorLinhas, linha, numNsr);
                                mensagemValidacao += auxLoteSeg.TextoValidacao;

                                quantRegLote++;
                                quantPagamento++;
                                somaValorPagamento += long.Parse(linha.Substring(119, 15));
                                somaQuantMoeda      = long.Parse(linha.Substring(114, 10));

                                RegistroK regK = new RegistroK();
                                regK.validaRegistroK(linha, contadorLinhas, mensagemValidacao);
                                mensagemValidacao = regK.TextoValidacao;
                            }
                            numNsr++;
                            break;

                        case "5":
                            linhaTraillerLote = linha;
                            //mensagemValidacao +=("Linha: " + contadorLinhas + ": Validando registro do Tipo: 5 (Trailler Lote)...<br>");
                            try
                            {
                                campoQuantRegLote       = int.Parse(linha.Substring(17, 6));
                                campoSomaValorPagamento = long.Parse(linha.Substring(23, 18));
                                campoSomaQuantMoeda     = long.Parse(linha.Substring(41, 15));

                                if (campoQuantRegLote != quantRegLote)
                                {
                                    mensagemValidacao += ("Erro no campo: Somatório de registros do lote: " + campoQuantRegLote + " A soma dos registros neste lote é: " + quantRegLote + "<br>");
                                }

                                if (campoSomaValorPagamento != somaValorPagamento)
                                {
                                    Auxiliar aux = new Auxiliar();
                                    string   campoSomaValorPag = aux.converteEmMoeda(contadorLinhas, linha, campoSomaValorPagamento.ToString());
                                    string   somaValorPag      = aux.converteEmMoeda(contadorLinhas, linha, somaValorPagamento.ToString());
                                    mensagemValidacao += ("Erro no campo: Somatório de valores: " + campoSomaValorPag + " A soma dos valores neste lote é: " + somaValorPag + "<br>");
                                }

                                if (campoSomaQuantMoeda != somaQuantMoeda)
                                {
                                    mensagemValidacao += ("Erro no campo: Somatório de quantidade moeda: " + campoSomaQuantMoeda + " A soma de quantidade moeda neste lote é: " + somaQuantMoeda + "<br>");
                                }
                            }
                            catch (Exception erro)
                            {
                                mensagemValidacao += ("Erro na formatação do registro do Tipo: 5 (Trailler Lote)...<br>" + erro + "<br>");
                            }

                            Registro5 validaReg5 = new Registro5();
                            validaReg5.valida(linha, mensagemValidacao);
                            mensagemValidacao = validaReg5.TextoValidacao;

                            quantRegLote       = 2;
                            somaQuantMoeda     = 0;
                            somaValorPagamento = 0;

                            contadorTraillerLote++;
                            numNsr = 1;
                            numLote++;
                            quantLote++;
                            break;

                        case "9":
                            linhaTraillerRemessa = linha;
                            //mensagemValidacao +=("Linha: " + contadorLinhas + ": Validando registro do Tipo: 9 (Trailler Remessa)...<br>");

                            Registro9 validaReg9 = new Registro9();
                            validaReg9.valida(linha, contadorLinhas, mensagemValidacao, quantLote);
                            mensagemValidacao = validaReg9.TextoValidacao;

                            contadorTraillerRemessa++;
                            break;

                        default:
                            mensagemValidacao += ("Linha: " + contadorLinhas + ": Não foi possível identificar a linha: " + linha + "<br>");
                            break;
                        }
                    }
                    else
                    {
                        mensagemValidacao += ("Linha: " + contadorLinhas + ": Não foi possível identificar a linha: " + linha + "<br>");
                    }
                } // fecha o laço while

                sr.Close(); //fecha o StreamReader
            }
            catch (IOException ex)
            {
                mensagemValidacao += ("Ocorreu um erro ao ler o arquivo: " + ex + "<br>");
            }
            catch (FormatException ex)
            {
                mensagemValidacao += ("Ocorreu um erro ao ler o arquivo: " + ex + "<br>");
            }

            if (contadorHeaderRemessa - contadorTraillerRemessa == 0)
            {
                mensagemValidacao += ("<br>Quantidade de lotes: " + contadorHeaderLote + "<br>Quantidade de pagamentos: " + quantPagamento + "<br>Quantidade de linhas lidas: " + contadorLinhas + "<br><br>");
            }
            else
            {
                mensagemValidacao += ("<br>Problema com HEADER ou TRAILLER da remessa!<br>Quant. Header: " + contadorHeaderRemessa + "<br>Quant. Trailler: " + contadorTraillerRemessa + "<br><br>");
            }

            return(mensagemValidacao);
        }
        internal void validaRegistroA(string linha, int numLinha)
        {
            if (linha.Length != 240)
            {
                textoValidacao += ("Linha: " + numLinha + " Fora do Padrão: quantidade de colunas é difente de 240! esta linha possui: " + linha.Length + " colunas<br>");
            }
            else
            {
                try
                {
                    string tipoMovimento         = linha.Substring(14, 1);       // A.06 015 015 9(001) Tipo de movimento
                    string codInstrucaoMovimento = linha.Substring(15, 2);       // A.07 016 017 9(002) Código Instrução Movimento
                    string camaraCompensacao     = linha.Substring(17, 3);       // A.08 018 020 9(003) Câmara de Compensação
                    string codBancoDestino       = linha.Substring(20, 3);       // A.09 021 023 9(003) Código Banco de Destino
                    string codAgenciaDestino     = linha.Substring(23, 5);       // A.10 024 028 9(005) Código da Agência de Destino
                    string dvAgenciaDestino      = linha.Substring(28, 1);       // A.11 029 029 X(001) DV Agência de Destino
                    string contaCorrenteDestino  = linha.Substring(29, 12);      // A.12 030 041 9(012) Conta Corrente Destino
                    string dvContaDestino        = linha.Substring(41, 1);       // A.13 042 042 X(001) DV Conta Destino
                    string dvAgenciaContaDestino = linha.Substring(42, 1);       // A.14 043 043 X(001) DV Agência/Conta Destino
                    string nomeFavorecido        = linha.Substring(43, 30);      // A.15 044 073 X(030) Nome do terceiro - favorecido

                    string numDocAtribuidoEmpresa = linha.Substring(73, 6);      // A.16 074 079 9(006) Número do Documento Atribuído pela Empresa
                    string filler          = linha.Substring(79, 13);            // A.17 080 092 X(013) Filler
                    string tipoConta       = linha.Substring(92, 1);             // A.18 093 093 X(001) Tipo de conta
                    string dataVencimento  = linha.Substring(93, 8);             // A.19 094 101 9(008) Data de vencimento
                    string tipoMoeda       = linha.Substring(101, 3);            // A.20 102 104 X(003) Tipo de Moeda
                    string quantMoeda      = linha.Substring(114, 10);           // A.21 105 119 9(010) Quantidade de Moeda
                    string valorLancamento = linha.Substring(119, 15);           // A.22 120 134 9(015) Valor do Lançamento
                    string numDocBanco     = linha.Substring(134, 9);            // A.23 135 143 9(009) Número Documento Banco
                    string filler24        = linha.Substring(143, 3);            // A.24 144 146 X(003) Filler
                    string quantParcelas   = linha.Substring(146, 2);            // A.25 147 148 9(002) Quantidade de Parcelas

                    string indicadorBloqueio          = linha.Substring(148, 1); // A.26 149 149 X(001) Indicador de Bloqueio, indica se as parcelas posteriores deverão ser efetivadas ou não. Caso alguma não seja efetuada, preencher: S - Bloqueia as demais parcelas ou N - Não bloqueia as demais parcelas
                    string indicadorFormaParcelamento = linha.Substring(149, 1); // A.27 150 150 9(001) Indicador Forma de Parcelamento, preencher: “1” - Data Fixa ou “2” - Periódico ou “3” - Dia útil
                    string periodoOuDiaVencimento     = linha.Substring(150, 2); // A.28 151 152 X(002) Período ou dia de vencimento, preencher com número desejado para o tratamento do Indicador da Forma de Parcelamento, sendo: - Quando for informado o Indicador de Forma de Lançamento, Data Fixa, significa que será efetuado no dia informado, por exemplo, se for informado 05, será efetuado o lançamento no dia 05 de cada mês; - Quando for informado o Indicador de Forma de Lançamento, Periódico, significa que será efetuado a cada período informado, por exemplo, se for informado 05, será efetuado a cada 5 dias; - Quando for informado o Indicador de Forma de Parcelamento, Dia útil, significa que será efetuado no dia útil informado, por exemplo, se for informado 05, será efetuado no 5º dia útil do mês
                    string numeroParcela      = linha.Substring(152, 2);         // A.29 153 154 9(002) Número Parcela - Quando parcela única informar “00”
                    string dataEfetivacao     = linha.Substring(154, 8);         // A.30 155 162 9(008) Data da efetivação - na remessa deve ser preenchido com zeros
                    string valorRealEfetivado = linha.Substring(162, 15);        // A.31 163 177 9(015) Valor Real Efetivado - na remessa deve ser preenchidos com zeros
                    string informacao2        = linha.Substring(177, 40);        // A.32 178 217 X(040) Informação 2 - preencher com espaços
                    string FinalidadeDoc      = linha.Substring(217, 2);         // A.33 218 219 9(002) Finalidade DOC - preencher conforme tabela P005, quando pagamento através de DOC para os demais preencher com “00”
                    string usoFebraban        = linha.Substring(219, 10);        // A.34 220 229 X(010) Uso FEBRABAN - preencher com espaços
                    string avisoFavorecido    = linha.Substring(229, 1);         // A.35 230 230 9(001) Aviso ao Favorecido - preencher conforme tabela P006
                    string ocorrencias        = linha.Substring(230, 10);        // A.36 231 240 X(010) Ocorrências - preencher com espaços

                    switch (tipoMovimento)
                    {
                    case "0": break;

                    case "9": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Atenção no campo: Tipo de movimento = " + tipoMovimento + " : preencher: “0” - inclusão ou “9” - exclusão<br>");
                        break;
                    }

                    if (!codInstrucaoMovimento.Contains("00"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Código Instrução Movimento = " + codInstrucaoMovimento + " : preencher com “00”<br>");
                    }

                    switch (camaraCompensacao)
                    {
                    case "018": break;

                    case "700": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Câmara de Compensação = " + camaraCompensacao + " : preencher: “018” – Finalidade TED ou “700” – Finalidade DOC<br>");
                        break;
                    }

                    Auxiliar auxBancoDestino = new Auxiliar();
                    auxBancoDestino.validaCodBanco(numLinha, codBancoDestino);
                    textoValidacao += auxBancoDestino.TextoValidacao;

                    try
                    {
                        int.Parse(codAgenciaDestino);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Código da Agência de Destino = " + codAgenciaDestino + " : preencher com código da Agência do favorecido<br>");
                    }

                    if (dvAgenciaDestino.Contains(" "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  DV Agência de Destino = " + dvAgenciaDestino + " : preencher com o dígito verificador da Agência do favorecido<br>");
                    }

                    try
                    {
                        long.Parse(contaCorrenteDestino);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Conta Corrente Destino = " + contaCorrenteDestino + " : preencher com o número da conta corrente do favorecido<br>");
                    }

                    if (dvContaDestino.Contains(" ") && codBancoDestino.Equals("104"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  DV Conta Destino = " + dvContaDestino + " : preencher com o dígito verificador da conta corrente do favorecido<br>");
                    }

                    if (!dvAgenciaContaDestino.Contains(" "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  DV Agência/Conta Destino = " + dvAgenciaContaDestino + " : preencher com espaço<br>");
                    }

                    if (nomeFavorecido.Contains("                              "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Nome do terceiro = " + nomeFavorecido + " : preencher com o nome do favorecido<br>");
                    }

                    try
                    {
                        int.Parse(numDocAtribuidoEmpresa);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Número do Documento Atribuído pela Empresa = " + numDocAtribuidoEmpresa + " : preencher com o número do agendamento atribuído pela empresa<br>");
                    }

                    if (!filler.Contains("             "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Filler = " + filler + " : preencher com espaços<br>");
                    }

                    switch (tipoConta)
                    {
                    case "0": break;

                    case "1": break;

                    case "2": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Tipo de conta – Finalidade TED = " + tipoConta + " : preencher: “0” – Sem conta ou “1” – Conta corrente ou “2” – Poupança<br>");
                        break;
                    }

                    try
                    {
                        int.Parse(dataVencimento);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Data de vencimento = " + dataVencimento + " : preencher com a data de vencimento do agendamento (DDMMAAAA)<br>");
                    }

                    switch (tipoMoeda)
                    {
                    case "BRL": break;

                    case "USD": break;

                    case "UFR": break;

                    case "TRD": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Tipo de Moeda = " + tipoConta + " : preencher: “BRL”(Real) ou “USD”(Dólar Americano) ou “UFR”(UFIR) ou “TRD”(Taxa Referencial Diária)<br>");
                        break;
                    }

                    try
                    {
                        int.Parse(quantMoeda);
                        if (!tipoMoeda.Equals("BRL") && quantMoeda.Equals("0000000000"))
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: Quantidade de Moeda = " + quantMoeda + "informar a quantidade de moeda a ser convertida<br>");
                        }
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Quantidade de Moeda = " + quantMoeda + " : informar a quantidade de moeda a ser convertida, quando moeda BRL preencher com zeros<br>");
                    }

                    try
                    {
                        int.Parse(valorLancamento);
                        if (tipoMoeda.Equals("BRL") && valorLancamento.Equals("0000000000000"))
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor do Lançamento = " + valorLancamento + "informar o valor do lançamento quando tipo de moeda BRL<br>");
                        }
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Valor do Lançamento = " + valorLancamento + " : informar o valor do lançamento quando tipo de moeda BRL<br>");
                    }

                    if (!numDocBanco.Contains("000000000"))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Número Documento Banco = " + numDocBanco + " : preencher com zeros<br>");
                    }

                    if (!filler24.Contains("   "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Filler = " + filler24 + " : preencher com espaços<br>");
                    }

                    try
                    {
                        int numParcelas = int.Parse(quantParcelas);
                        if (numParcelas < 1)
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo: Quantidade de Parcelas = " + quantParcelas + " :preencher com a quantidade de parcelas a ser efetuado o pagamento, para pagamento único preencher com “01”<br>");
                        }
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Quantidade de Parcelas = " + quantParcelas + " : preencher com a quantidade de parcelas a ser efetuado o pagamento, para pagamento único preencher com “01”<br>");
                    }



                    switch (indicadorBloqueio)
                    {
                    case "S": break;

                    case "N": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Indicador de Bloqueio = " + indicadorBloqueio + " : preencher: S - Bloqueia as demais parcelas ou N - Não bloqueia as demais parcelas<br>");
                        break;
                    }

                    switch (indicadorFormaParcelamento)
                    {
                    case "1": break;

                    case "2": break;

                    case "3": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Indicador Forma de Parcelamento = " + indicadorFormaParcelamento + " : preencher: “1” - Data Fixa ou “2” - Periódico ou “3” - Dia útil<br>");
                        break;
                    }

                    if (periodoOuDiaVencimento.Contains("  "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Período ou dia de vencimento = " + periodoOuDiaVencimento + " : preencher com número desejado para o tratamento do Indicador da Forma de Parcelamento<br>");
                    }
                    try
                    {
                        if (!numeroParcela.Contains("00") && quantParcelas.Contains("1"))
                        {
                            textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Número Parcela = " + numeroParcela + " : Quando parcela única informar “00”<br>");
                        }
                        int.Parse(numeroParcela);
                    }
                    catch (Exception e)
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Número Parcela = " + numeroParcela + " : Quando parcela única informar “00”<br>");
                    }

                    try { int.Parse(dataEfetivacao); }
                    catch (Exception e) { textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Data da efetivação = " + dataEfetivacao + " : na remessa deve ser preenchido com zeros<br>"); }

                    try { int.Parse(valorRealEfetivado); }
                    catch (Exception e) { textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Valor Real Efetivado = " + valorRealEfetivado + " : na remessa deve ser preenchido com zeros<br>"); }

                    if (!informacao2.Contains("                                        "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo:  Informação 2 = " + informacao2 + " : preencher com espaços<br>");
                    }

                    switch (FinalidadeDoc)
                    {
                    case "01": break;

                    case "02": break;

                    case "03": break;

                    case "04": break;

                    case "05": break;

                    case "06": break;

                    case "07": break;

                    case "08": break;

                    case "09": break;

                    case "10": break;

                    case "11": break;

                    case "00": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Finalidade DOC = " + FinalidadeDoc + " : preencher conforme tabela P005, se não for DOC preencher com “00”<br>");
                        break;
                    }

                    if (!usoFebraban.Contains("          "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Uso FEBRABAN = " + usoFebraban + " : preencher com espaços!<br>");
                    }

                    switch (avisoFavorecido)
                    {
                    case "0": break;

                    case "2": break;

                    case "5": break;

                    case "6": break;

                    case "7": break;

                    default: textoValidacao += ("Linha: " + numLinha + " Erro no campo: Aviso ao Favorecido = " + avisoFavorecido + " : preencher conforme tabela P006<br>");
                        break;
                    }

                    if (!ocorrencias.Contains("          "))
                    {
                        textoValidacao += ("Linha: " + numLinha + " Erro no campo: Ocorrências do Retorno = " + ocorrencias + " : preencher com espaços!<br>");
                    }
                }
                catch (Exception erro)
                {
                    textoValidacao += ("Linha: " + numLinha + " não consegui ler a linha do registro J = " + linha + "<br>" + erro);
                }
            }
        }