Ir para conteúdo
  • Cadastre-se

dev botao

Erro "cpf Deve Conter 11 Digitos" Ao Processar Retorno Do Banco


  • Este tópico foi criado há 2426 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá, tenho um problema já faz tempo ao se processar o retorno do banco 748 - Sicredi. Sempre que tento processar o retorno do banco, me é mostrada a mensagem "CPF deve ter 11 dígitos. (Apenas Números)".

Para contornar este problema, tenho que fazer uma alteração na unit "acbrvalidador.pas" que está dentro da pasta acbr\fontes\diversos.

 

********************************************************

Procedure TACBrValidador.ValidarCPF ;
Var DV1, DV2 : AnsiString ;
begin
  if fsAjustarTamanho then
     fsDocto := padR( fsDocto, 11, '0') ;

  //assumo que se tiver maior que 11 caracteres, veio um cpf do estilo banco sicredi que preenche com zeros a esquerda até completar 14 caracteres
    if Length( fsDocto ) > 11 then
    fsDocto:=copy(fsDocto,4,11);  //<==== peço pra olhar da posição 4 pra frente
  if (Length( fsDocto ) <> 11) or ( not StrIsNumber( fsDocto ) ) then
//  if (Length( fsDocto ) <> 11) then
  begin
     fsMsgErro := 'CPF deve ter 11 digitos. (Apenas numeros)' ;
     exit
  end ;

  if pos(fsDocto,'11111111111.22222222222.33333333333.44444444444.55555555555.'+
         '66666666666.77777777777.88888888888.99999999999.00000000000') > 0 then
  begin
     fsMsgErro := 'CPF inválido !' ;
     exit ;
  end ;

  Modulo.MultiplicadorInicial := 2  ;
  Modulo.MultiplicadorFinal   := 11 ;
  Modulo.FormulaDigito        := frModulo11 ;
  Modulo.Documento := copy(fsDocto, 1, 9) ;
  Modulo.Calcular ;
  DV1 := IntToStr( Modulo.DigitoFinal ) ;

  Modulo.Documento := copy(fsDocto, 1, 9)+DV1 ;
  Modulo.Calcular ;
  DV2 := IntToStr( Modulo.DigitoFinal ) ;

  fsDigitoCalculado := DV1+DV2 ;

  if (DV1 <> fsDocto[10]) or (DV2 <> fsDocto[11]) then
  begin
     fsMsgErro := 'CPF inválido.' ;

     if fsExibeDigitoCorreto then
        fsMsgErro := fsMsgErro + '.. Digito calculado: '+fsDigitoCalculado ;
  end ;
end;

********************************************************

Funciona beleza, mas sempre que atualizo o acbr tenho problemas. Obrigado!

Conectiva Soft - Automação Comercial - Visite nosso site: www.conectivasoft.com.br

Skype: [email protected]

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

 

Não vejo necessidade em alterar a função ValidarCPF(), basta passar a mesma a quantidade correta de caracteres.

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

Bom dia Juliana, bom, essa foi a forma que eu encontrei aqui pra conseguir contornar o problema. A questão é que não somos nós os usuários quem passa o cpf para a rotina ValidarCPF, mas sim o próprio componente acbrboleto. No meu caso, o retorno é do banco sicredi e não testei com outro banco, mas o que da a entender é que a rotina que faz a leitura do campo CNPJ/CPF no arquivo de retorno do banco está preparada para pegar um CNPJ (14 caracteres) e no meu caso, minha conta que esta como cedente no banco utiliza meu CPF.

Conectiva Soft - Automação Comercial - Visite nosso site: www.conectivasoft.com.br

Skype: [email protected]

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia Edson.

 

Neste caso, conforme você mesmo disse o correto é alterar a rotina que faz a leitura do arquivo retorno.

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...
  • Membros Pro
14 minutos atrás, farnetani disse:

Tive o mesmo problema para o mesmo banco!

Na classe da CAIXA que funciona, temos assim:

   rCNPJCPF := trim( Copy(ARetorno[0],19,14)) ; 

 if ACBrBanco.ACBrBoleto.Cedente.TipoInscricao = pJuridica then
    begin
      rCNPJCPF := trim( Copy(ARetorno[1],19,15));
      rCNPJCPF := RightStr(rCNPJCPF,14) ;
    end
   else
    begin
      rCNPJCPF := trim( Copy(ARetorno[1],23,11));
      rCNPJCPF := RightStr(rCNPJCPF,11) ;
    end;

 

e na classe: ACBrBancoBancoob.pas temos:

   rCNPJCPF := trim( Copy(ARetorno[0],19,14)) ;

   if ACBrBanco.ACBrBoleto.Cedente.TipoInscricao = pJuridica then
    begin
      rCNPJCPF := trim( Copy(ARetorno[1],19,15));
      rCNPJCPF := RightStr(rCNPJCPF,14) ;
    end
   else
    begin
      rCNPJCPF := trim( Copy(ARetorno[1],23,11));
      rCNPJCPF := RightStr(rCNPJCPF,11) ;
    end;

 

Não consegui ver o problema. Uma coisa que notei que no momento da leitura o componente está lendo os valores com a máscara.

Analisando a classe ValidadorACBR, o correto não seria ter uma função que fizesse o filtro para ter apenas os números sem a máscara???

Procedure TACBrValidador.ValidarCPF ;
Var DV1, DV2 : String ;
begin
  if fsAjustarTamanho then
     fsDocto := PadLeft( fsDocto, 11, '0') ;

  if (Length( fsDocto ) <> 11) or ( not StrIsNumber( fsDocto ) ) then
  begin
     fsMsgErro := 'CPF deve ter 11 dígitos. (Apenas números)' ;
     exit
  end ;

  if pos(fsDocto,'11111111111.22222222222.33333333333.44444444444.55555555555.'+
         '66666666666.77777777777.88888888888.99999999999.00000000000') > 0 then
  begin
     fsMsgErro := 'CPF inválido !' ;
     exit ;
  end ;

 

Editado por farnetani
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2426 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.