× Linguagem de Programação ADVPL

Perguntas Módulo 11 CNAB Bradesco

Mais
8 anos 7 meses atrás #30492 por raisiqueira
Fala turma, estou com problemas para calcular o Módulo 11 do CNAB BRADESCO. Segundo o manual, Se o resto da divisão for “1”, desprezar a diferença entre o divisor menos o resto que será “10” e considerar o dígito como “P”.

Alguém pode me dar uma luz no código abaixo?
******************************************************************************************************
Static Function Modulo11(cData,nPeso)
******************************************************************************************************

Local L, D, P := 0

L := Len(cdata)
D := 0
P := 1

While L > 0
    P := P + 1
    D := D + (Val(SubStr(cData, L, 1)) * P)
    If P = nPeso
        P := 1
    EndIf
    L := L - 1
EndDo
/*
D := 11 - (mod(D,11))
If (D == 0 .Or. D == 1 .Or. D == 10 .Or. D == 11)
    D := 1
EndIf
*/

    If Alltrim(cData) == 'NN'

        D := 11 - (mod(D,11))

        IF D == 11 //Se o resto for 11, o digito verificador será 0
            D := 0
        Endif

        IF D == 10 //Se o resto for 10, o dígito verificador será P
            D := "P"
        Endif
    Else
        IF Mod(D,11) == 0 .or. Mod(D,11) == 1 .or. Mod(D,11) == 10
            D := 1
        Else
            D := 11 - (mod(D,11))
        Endif
    Endif


Return(D)
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 7 meses atrás #30499 por raisiqueira
Respondido por raisiqueira no tópico Módulo 11 CNAB Bradesco
Refiz a função de Modulo 11 com ajuda de um amigo, o resultado foi positivo. B)
/*
* Função Modulo 11 para gerar Digito Verificador do Bradesco
* 2016 | IMEC
* Autor Rai Siqueira, Raphael Mendes
 */

Static Function Modulo11(cData,nPeso,cOrig)

Local L, D, P := 0

L := Len(cdata)
D := 0
P := 1

While L > 0
 P := P + 1
 D := D + (Val(SubStr(cData, L, 1)) * P)
 If P = nPeso
  P := 1
 EndIf
 L := L - 1
EndDo

 If Alltrim(cOrig) == 'NN'

  D := 11 - (mod(D,11))

  IF D == 11 //Se o resto for 11, o digito verificador será 0
   D := 0
  Endif

  IF D == 10 //Se o resto for 10, o dígito verificador será P
   D := "P"
  Endif
 Else
  IF Mod(D,11) == 0 .or. Mod(D,11) == 1 .or. Mod(D,11) == 10
   D := 1
  Else
   D := 11 - (mod(D,11))
  Endif
 Endif


Return(D)

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.101 segundos
Joomla templates by a4joomla