Jump to content
Fivewin Brasil

Validar codigo de barras de produtos


marcioe

Recommended Posts

Olá a aTodos

Tem como validar Código de barras
Exemplo  7891260097793      Válido
7891260097794   Inválido

Teria uma Rotina para fazer isso

Pois tem clientes que cadastram errado ,e  está me gerando problemas de envio de NF

Link to comment
Share on other sites

eu faço assim:

         // A VARIAVEL CODEAN13 GUARDA O CÓDIGO EAN13 DIGITADO PELO OPERADOR
         DIGI="131313131313"
         T=0
         FOR I=1 TO 12
             T=T+(VAL(SUBSTR(CODEAN13,I,1))*VAL(SUBSTR(CODEAN13,I,1)))
         NEXT I
         DIG="0"
         IF (T/10)>INT(T/10)
            DIG=STR(((INT(T/10)+1)*10)-T,1)
         ENDIF
         IF RIGHT(CODEAN13,1)#DIG
            MSGINFO("Código de barra inválido!","Favor verificar:")
         endif
 

Link to comment
Share on other sites

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL cCodBar

   cCodBar := '07033071756'
   // cCodBar := '78900073' // MARLBORO MACO BRANCO

   IF .NOT. ValidaEAN( @cCodbar )

      MsgStop( "Código de Barras Invalidado!", "Erro Fatal" )

   ELSE

      MsgStop( "Código de Barras Validado!", "Sucesso!" )

   ENDIF

RETURN NIL

Function ValidaEAN(cCodigoBarras)

   LOCAL nInd     := 0
   LOCAL nUnidade := 0
   LOCAL nDigito  := 0
   LOCAL lRet     := .F.
   LOCAL aPosicao[12]

   If StrZero(Len(Trim(cCodigoBarras)), 2,0) $ "13"

      For nInd := 1 to 12

         aPosicao[nInd] := Val(SubStr(cCodigoBarras, nInd, 1))

      Next

      nUnidade := Val(Right(Str(((aPosicao[2]+aPosicao[4]+aPosicao[6]+aPosicao[8]+aPosicao[10]+aPosicao[12])*3) + ( aPosicao[1]+aPosicao[3]+aPosicao[5]+aPosicao[7]+aPosicao[9]+aPosicao[11])), 1))

      nDigito  := If((10-nUnidade ) > 9, 0, 10-nUnidade)

      lRet     := nDigito = Val(Right(AllTrim(cCodigoBarras), 1))

      IF( .NOT. lRet, Alert("Exigencia NF-e * O digito verificador esta incorreto !; Digito Verificador Correto:" + STR(nDigito,2)),)

   Else

      RETURN( .T. )

   EndIf

Return( lRet )

/* // OU:
FUNCTION ValidaEAN( cCodBar )

   LOCAL nInd     := 0
   LOCAL nUnidade := 0
   LOCAL nDigito  := 0
   LOCAL lRet     := .T.
   LOCAL aPosicao[ 12 ]

   IF Empty( cCODBAR )

      MsgStop( "Código de Barras está Vazio, Verifique!", "Error" )

      lRet := .F.

      RETURN( lRet )

   ENDIF

   cCodbar := StrZero( Val( AllTrim( cCodbar ) ), 13, 0 )

   FOR nInd := 1 TO 12

      aPosicao[ nInd ] := Val( SubStr( cCodbar, nInd, 1 ) )

   NEXT

   nUnidade := Val( Right( Str( ( ( aPosicao[ 2 ] + aPosicao[ 4 ] + aPosicao[ 6 ] + aPosicao[ 8 ] + aPosicao[ 10 ] + aPosicao[ 12 ] ) * 3 ) + ( aPosicao[ 1 ] + aPosicao[ 3 ] + aPosicao[ 5 ] + aPosicao[ 7 ] + aPosicao[ 9 ] + aPosicao[ 11 ] ) ), 1 ) )

   nDigito  := If( ( 10 - nUnidade ) > 9, 0, 10 - nUnidade )

   lRet := nDigito = Val( Right( AllTrim( cCodbar ), 1 ) )

RETURN( lRet )
*/

// FIN / END

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...