Clipper On Line • Ver Tópico - ERRATA: Postei um código errado que pode gerar problemas

ERRATA: Postei um código errado que pode gerar problemas

Poste aqui suas sugestões e/ou críticas sobre o fórum, fale sobre a moderação e envie elogios.

Moderador: Moderadores

 

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor Jairo Maia » 28 Ago 2018 14:01

Olá Toledo,

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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor JoséQuintas » 28 Ago 2018 14:32

Se interessar, a minha está na Sefazclass há bastante tempo, assim como outras validações.

https://github.com/JoseQuintas/sefazclass/blob/master/source/ze_digitodoc.prg

validagtin.png


Dá pra aperfeiçoar usando Mod() por exemplo....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor JoséQuintas » 28 Ago 2018 14:38

Aliás...
É difícil encontrar utilidade pra um FOR/EACH composto, mas essa seria uma delas.
Alguma coisa parecida com isto...

FOR EACH cNumero, nMultiplica IN Left( cGTIN, 13 ), { 3, 1 }
   nSoma += Val( cNumero ) * nMultiplica
NEXT


O FOR/EACH vai percorrer uma letra de cada vez, ao mesmo tempo que um elemento do array de cada vez.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor Toledo » 28 Ago 2018 15:11

Jairo, mensagem já editada.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor Jairo Maia » 28 Ago 2018 15:46

Toledo escreveu:Jairo, mensagem já editada.
Obrigado.

JoséQuintas escreveu:Se interessar, a minha está na Sefazclass há bastante tempo
José, no meu caso eu não tenho como usar a sua função. Achei bem legal como você montou, particularmente a permuta do algoritmo, mas para meu caso tem dois pontos que inviabiliza o uso, a saber:

1-Você inicia lOK como verdadeiro, então se enviar um código vazio, retornará .T.
2-Você não está tratando código 0 (zero) ou sequência de zeros, então também vai retornar .T. No meu caso, quando não há GTIN preencho com Zeros.

Em nenhum dos dois casos são GTIN´s válidos. Valeu.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor alxsts » 28 Ago 2018 15:50

Olá!

Parabéns Jairo pela preocupação em corrigir o equívoco.

GTIN e EAN... qual é a diferença?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor JoséQuintas » 28 Ago 2018 19:22

Jairo Maia escreveu:Em nenhum dos dois casos são GTIN´s válidos. Valeu.


Opção:

... GET cGTIN VALID ! Empty( cGTIN ) .AND. ;
                            ( Trim( cGTIN ) $ "0000000000000" .OR. ;
                            Trim( cGTIN ) == "SEM GTIN" .OR. ;
                            GTINOk( cGTIN ) )


alxsts escreveu:GTIN e EAN... qual é a diferença?


Até pesquisei agora...
GTIN é o código do produto, padrão mundial.
EAN é o nome do padrão do código de barras, mas tradicionalmente era o nome do "GTIN" também.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor Jairo Maia » 28 Ago 2018 19:33

Olá Alexandre,

alxsts escreveu:GTIN e EAN... qual é a diferença?
Apenas o Nome. GTIN uniu os antigos códigos EAN 8 e EAN13, e também o código UPC que tinha 10 dígitos e passou a ter 13 porque se acrescentou o código do pais no início, no caso do Brasil o código identificador de pais é 789, por isso produtos fabricados aqui ou embalados aqui, sempre começam com 789. Também unificou o código ITF-14 ou DUn-14.

Isso porque em função da globalização, foi necessário um acordo internacional para resolver o problema de exportações/importações. Hoje todos os códigos são únicos no mundo, pois são precedidos pelo código do pais origem, exceto o EAN 12, que ainda não entendo direito.

O EAN-12, pode começar com zero, e não é precedido pelo código do pais de origem. Sei lá, não entendo esse código direito ainda.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

ERRATA: Postei um código errado que pode gerar problemas

Mensagempor alxsts » 29 Ago 2018 00:03

Olá!

Obrigado Jairo e Quintas.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes




Retornar para Sugestões, Críticas e Elogios sobre o Fórum

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro