Neste post: http://www.pctoledo.com.br/forum/viewtopic.php?p=125069#p125069 coloquei uma função que verifica se o código GTIN é valido. Ocorre que quando postei, peguei uma função que só funcionava antes porque eu só trabalhava com GTIN13. Agora, relendo o tópico, percebi que essa função é a que não funciona para GTIN8, GTIN12 OU GTIN14, vacilei na hora de pegar da minha pasta Testes.
Abaixo está a função que deveria ser postada, é a que uso em meus sistemas também. Assim, gostaria de solicitar a edição daquele post e substituir aquela função pela função abaixo por favor. É que como se trata de assunto fiscal, pode uma hora alguém decidir pegar a função, e usar em confiança (pela credibilidade que o fórum proporciona), e só perceber depois que gerar algum problema.
Agradeço Antecipadamente.
Func ValidaGTIN( cCodGtin ) // Verica se o código é um código GTIN válido
Local nPosi := 0
Local nDigito := 0
Local nSomatoria := 0
Local aAlgoritmo := {}
Local lRetorno := .F.
aAlgoritmo := { 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3 }
cCodGtin := AllTrim( cCodGtin )
If ( Val( cCodGtin ) <= 0 ) .Or. !( StrZero( Len( cCodGtin ), 2 ) $ [08,12,13,14] )
Return lRetorno
Else
nPosi := ( ( 14 - Len( cCodGtin ) ) + 1 )
EndIf
For x := 1 To ( Len( cCodGtin ) - 1 )
nSomatoria += ( Val( SubStr( cCodGtin, x, 1 ) ) * aAlgoritmo[ nPosi ] )
nPosi++
Next
nDigito := Val( Right( Hb_NToS( nSomatoria ), 1 ) )
If nDigito != 0
nDigito := ( 10 - nDigito )
EndIf
lRetorno := ( Hb_NToS( nDigito ) = Right( cCodGtin, 1 ) )
Return lRetorno