[RESOLVIDO] Digito Verificador

Discussão em 'EMS , HCM e Totvs 11' iniciado por DFResmer, Setembro 29, 2011.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. DFResmer

    DFResmer Membro Participativo

    Olá Galera!
    Qual a forma mais simples para chegar ao digito verificar da NFE do paraná?

    Alguém tem esta formula fácil?

    Att,

    Diogo
  2. lcpaulino

    lcpaulino Membro Participativo

    Bom dia!
    segue:
    DEFINE VARIABLE c-chave AS CHARACTER NO-UNDO.

    DEFINE VARIABLE i-fator-mult-dv-chave-nfe AS INTEGER NO-UNDO INIT 2.
    DEFINE VARIABLE i-repeat-dv-chave-nfe AS INTEGER NO-UNDO INIT 1.
    DEFINE VARIABLE d-tot-mult-dv-chave-nfe AS DECIMAL NO-UNDO.
    DEFINE VARIABLE i-dv-chave-nfe AS INTEGER NO-UNDO.

    ASSIGN c-chave = '5206043300991100250655012000000780026730161'.

    REPEAT i-repeat-dv-chave-nfe = i-repeat-dv-chave-nfe TO 43:
    ASSIGN d-tot-mult-dv-chave-nfe = d-tot-mult-dv-chave-nfe + ((INT(SUBSTRING(c-chave,(44 - i-repeat-dv-chave-nfe),1))) * i-fator-mult-dv-chave-nfe).
    IF i-fator-mult-dv-chave-nfe = 9 THEN
    ASSIGN i-fator-mult-dv-chave-nfe = 2.
    ELSE
    ASSIGN i-fator-mult-dv-chave-nfe = i-fator-mult-dv-chave-nfe + 1.
    IF i-repeat-dv-chave-nfe = 43 THEN
    IF (d-tot-mult-dv-chave-nfe - (TRUNCATE(d-tot-mult-dv-chave-nfe / 11,0) * 11)) = 0 OR
    (d-tot-mult-dv-chave-nfe - (TRUNCATE(d-tot-mult-dv-chave-nfe / 11,0) * 11)) = 1 THEN
    ASSIGN i-dv-chave-nfe = 0.
    ELSE
    ASSIGN i-dv-chave-nfe = 11 - (d-tot-mult-dv-chave-nfe - (TRUNCATE(d-tot-mult-dv-chave-nfe / 11,0) * 11)).
    END.

    MESSAGE 'chave original' c-chave SKIP
    'chave correta' c-chave + STRING(i-dv-chave-nfe) SKIP
    'DV correto: ' i-dv-chave-nfe
    VIEW-AS ALERT-BOX INFO BUTTONS OK.


    Luiz
    lc_paulino@hotmail.com
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página