Criar digito verificador banco do brasil

Discussão em 'Progress 4GL' iniciado por diegocf, Setembro 15, 2010.

  1. diegocf

    diegocf Membro Participativo

    Bom dia pessoal, estou precisando criar o calculo do modulo 11 no progress para fazer o calculo do digitor verificador de um boleto no banco do brasil, estou com duvidas de como fazer este codigo, alguem poderia me ajudar ? vejam um exemplo de calculo.

    Precisava de isto para hoje a tarde e nao sei o que fazer se alguem poder me ajudar agradeço.
    Forte abraço

    MÉTODOLOGIA
    a) O módulo 11 é utilizado para montagem dos campos nosso-número, código do cedente e
    prefixo da agência, que serão impressos nos respectivos campos do bloqueto de cobrança;
    b) Cada algarismo que compõe o nosso-número é multiplicado pelo respectivo multiplicador
    (peso).
    I - os multiplicadores (pesos) variam de 9 a 2, da direita para a esquerda;
    II - o primeiro dígito da direita para a esquerda deverá ser multiplicado por 9, o
    segundo por 8 e assim sucessivamente;
    c) Os resultados das multiplicacoes são somados;
    d) O total da soma é dívido por onze;
    I - se o resto for menor que 10 (dez) o DV será igual ao resto;
    II - se o resto for igual a 10 /dez/ o DV sera igual a X;
    III - se o resto for igual a 0 /zero/ o DV sera igual a 0;
    IV - no exemplo acima o digito verificador sera igual a 3;
    e) Exemplo: Nosso-Número: 05009401448-?
    0 5 0 0 9 4 0 1 4 4 8
    X X X X X X X X X X X
    7 8 9 2 3 4 5 6 7 8 9
    . . . . . . . . . . ........72
    . . . . . . . . . . .............32
    . . . . . . . . ..................28
    . . . . . . . .......................06
    . . . . . . ............................00
    . . . . . .................................16
    . . . . ......................................27
    . . . ...........................................00
    . . ................................................00
    . .....................................................40
    ..........................................................00
    Total. ..................................................221
    a) Soma do resultado das multiplicações: 72 + 22 + .... + 40 + 0 = 221
    b) Divisão do resultado da soma das multiplicações por 11: 221/11
    c) Resto da divisão igual a 1:
    d) Dígito Verificador = 1 (um)
    Nosso-Número: 05009401448-1
  2. MFerreira

    MFerreira Membro Participativo

    Boa Tarde Amigo!

    Se a logica segue conforme você mencionou acima e você já tem o "nosso número" a lógica abaixo poderá lhe ajudar :

    Código:
    DEFINE VARIABLE iCont           AS INTEGER     NO-UNDO.
    
    DEFINE VARIABLE nnumero         AS CHARACTER   NO-UNDO.
    DEFINE VARIABLE iBase           AS INTEGER     NO-UNDO.
    DEFINE VARIABLE nConvertido     AS INTEGER     NO-UNDO.
    
    DEFINE VARIABLE cDIgVer         AS CHARACTER   NO-UNDO.
    DEFINE VARIABLE iDigVer         AS INTEGER     NO-UNDO.
      
    
    
    ASSIGN nnumero = "05009401448".
    
    
    ASSIGN nConvertido = 0
           iBase       = 9.
    
    DO iCont = LENGTH(nnumero) TO 1 BY -1:
       ASSIGN nConvertido = nConvertido + (iBase * INT(SUBSTRING(nnumero, iCont, 1)))
              iBase = iBase - 1.
    
       IF iBase = 1 THEN
           ASSIGN iBase = 9.
    END.
    
    ASSIGN iDigVer = nConvertido MOD 11.
    
    IF iDigVer = 10 THEN 
        ASSIGN cDigVer = "X".
    ELSE IF iDigVer = 0 THEN
             ASSIGN cDigVer = "0".
         ELSE ASSIGN cDigVer = STRING(iDigVer).
    
    MESSAGE nConvertido SKIP 
        "Digito Verificador " cDigVer
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    Creio que se pensar um pouco mais, é possível melhorar a lógica, mas como você precisa pra hoje, pode ajudar
  3. diegocf

    diegocf Membro Participativo

    Boa tarde amigo,

    Vou testar aqui, mas agradeço a eficiência.

    Te dou um retorno.

    Grande abraço
  4. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Alguem teria o modelo do boleto do BAnco do Brasil???

Compartilhe esta Página