Pessoal como não achei nada na net sobre um código ean 13 em progress, resolvi postar esse modelo para ajudar quando alguém precisar. /* ------------ Códigos EAN para testar o último numero é o digito verificador 7896645900026 7898908141016 7893946087173 7897186015095 7891060886139 7898132132019 7506195185568 ------------- */ DEFINE VARIABLE deEAN AS DECIMAL NO-UNDO. DEFINE VARIABLE cEAN AS CHARACTER NO-UNDO. DEFINE VARIABLE lSeqPar AS LOGICAL NO-UNDO. DEFINE VARIABLE iPosicao AS INTEGER NO-UNDO. DEFINE VARIABLE iSomaPar AS INTEGER NO-UNDO. DEFINE VARIABLE iSomaImpar AS INTEGER NO-UNDO. DEFINE VARIABLE iTotalSoma AS INTEGER NO-UNDO. DEFINE VARIABLE iDigVerificador AS INTEGER NO-UNDO. DEFINE VARIABLE iDifTotalSoma AS INTEGER NO-UNDO. /* Código EAN com 12 posições */ ASSIGN deEAN = 789664590002 /* Converter para tratar como string */ cEAN = STRING(deEAN) /* Seta posição inicial do código EAN */ lSeqPar = NO. /* Percorrer string para somar as posições par e impar */ REPEAT iPosicao = 1 TO 12: IF lSeqPar THEN ASSIGN iSomaPar = iSomaPar + INT(SUBSTRING(cEAN,iPosicao,1)) lSeqPar = NO. ELSE ASSIGN iSomaImpar = iSomaImpar + INT(SUBSTRING(cEAN,iPosicao,1)) lSeqPar = YES. END. /* Pegar o total das somas das posições pares e multiplicar por 3 */ ASSIGN iSomaPar = (iSomaPar * 3) /* Totalizar os resultados pares e impares */ iTotalSoma = iSomaImpar + iSomaPar /* Variavel Auxiliar para localizar o digito verificador */ iDifTotalSoma = iTotalSoma iDigVerificador = 0. /* Verifica se o digito é multiplo de 10 */ IF (iTotalSoma MOD 10) <> 0 THEN DO: /* Caso não seja então ir adicionando até encontrar o multiplo de 10 */ REPEAT: ASSIGN iDifTotalSoma = iDifTotalSoma + 1 iDigVerificador = iDigVerificador + 1. IF (iDifTotalSoma MOD 10) = 0 THEN LEAVE. END. END. MESSAGE /* "iSomaPar " iSomaPar SKIP */ /* "iSomaImpar " iSomaImpar SKIP */ /* "iTotalSoma " iTotalSoma SKIP */ "iDigVerificador " iDigVerificador VIEW-AS ALERT-BOX INFO BUTTONS OK.