Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga: Prev Next

Titolo: Ean2Bin

Categoria: Codice Ultimo Aggiornamento: 09/04/18


Funzione utile per ricavare una stringa come questa riferita al codice EAN 13 o EAN 8 : 00010100011010100111000110100100010100111010001101010111001011011001001110101110010100001101100101000

è possibile poi dividere la stringa e disegnare con SVG linee verticali di spessore normale (0) e spessore doppio (1) per ricavare l'immagine del barcode.

$1 è il codice EAN ( se è lungo 12 o 7 caratteri inserire anche il metodo checkdigit, lo trovate in questo forum).

C_LONGINT($K)
C_TEXT($strAux)
C_TEXT($strExit)
C_TEXT($strCode)
C_TEXT($strEANCode)
$strAux:=$1
$strEANCode:=$1

    // se ho passato il codice ean senza check digit lo calcolo
If (Length($strAux)=12)
  $strEANCode:=Ean138CheckDigit ($strEANCode)
Else
  If (Length($strAux)=7)
    $strEANCode:=Ean138CheckDigit ($strEANCode)
  End if
End if

$strAux:=$strEANCode

If (Not(isnumeric ($strAux)))
  ALERT("Attenzione, il barcode contiene caratteri non validi")
  $0:=""
End if


If (Length($strAux)=13)
      // verifico che sia un EAN 13
      // per prima cosa scarto la prima cifra che è lo stato di emissione(fare riferimento ad INDICOD '
  $strAux:=Substring($strAux;2)
  C_LONGINT($numero)
  $numero:=Num(tleft ($strEANCode;1))
  Case of
    : $numero=0
      $strCode:="000000"
    : $numero=1
      $strCode:="001011"
    : $numero=2
      $strCode:="001101"
    : $numero=3
      $strCode:="001110"
    : $numero=4
      $strCode:="010011"
    : $numero=5
      $strCode:="011001"
    : $numero=6
      $strCode:="011100"
    : $numero=7
      $strCode:="010101"
    : $numero=8
      $strCode:="010110"
    : $numero=9
      $strCode:="011010"
  End case
Else
  $strCode:="0000"
End if

    //
    //Il codice EAN inizia con un carattere iniziale
    //
$strExit:="000101"

    //
    //Prima metà del codice
    //
For ($K;1;Length($strAux)\2)
  
  C_TEXT($code)
  C_LONGINT($numero)
  
  $code:=Substring($strCode;$K;1)
  $numero:=Num(Substring($strAux;$K;1))
  Case of
    : $numero=0
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0001101"
      Else
        $temptext:="0100111"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=1
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0011001"
      Else
        $temptext:="0110011"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=2
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0010011"
      Else
        $temptext:="0011011"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=3
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0111101"
      Else
        $temptext:="0100001"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=4
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0100011"
      Else
        $temptext:="0011101"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=5
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0110001"
      Else
        $temptext:="0111001"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=6
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0101111"
      Else
        $temptext:="0000101"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=7
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0111011"
      Else
        $temptext:="0010001"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=8
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0110111"
      Else
        $temptext:="0001001"
      End if
      $strExit:=$strExit+$temptext
      
    : $numero=9
      C_TEXT($temptext)
      If ($code="0")
        $temptext:="0001011"
      Else
        $temptext:="0010111"
      End if
      $strExit:=$strExit+$temptext
      
  End case
End for

    //
    // Prosegue poi con un separatore di mezzo
    //

$strExit:=$strExit+"01010"

    //
    // Seconda metà del codice
    //

For ($K;Length($strAux)\2+1;Length($strAux))
  C_LONGINT($numero)
  $numero:=Num(Substring($strAux;$K;1))
  Case of
    : $numero=0
      $strExit:=$strExit+"1110010"
    : $numero=1
      $strExit:=$strExit+"1100110"
    : $numero=2
      $strExit:=$strExit+"1101100"
    : $numero=3
      $strExit:=$strExit+"1000010"
    : $numero=4
      $strExit:=$strExit+"1011100"
    : $numero=5
      $strExit:=$strExit+"1001110"
    : $numero=6
      $strExit:=$strExit+"1010000"
    : $numero=7
      $strExit:=$strExit+"1000100"
    : $numero=8
      $strExit:=$strExit+"1001000"
    : $numero=9
      $strExit:=$strExit+"1110100"
  End case
End for

    // Il Codice EAN finisce con un separatore finale

$strExit:=$strExit+"101000"

$0:=$strExit


Inviato da: Massimiliano Chiodi Visite: 6665

Se accedi con utente e password, puoi aggiungere dei commenti.


Accesso

User:
Pass: Accedi

Cerca

Se non trovi le informazioni che cerchi scrivi a aiuto@sviluppo4d.it

4D Principali

4D Discussioni

Faq random


Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
330 utenti registrati

Pagina servita il 12/12/24 alle 21:43:52 Valid HTML 4.01! Valid CSS!

Mutuo Facile, iDigitalScout, iDigitalTags e altre app di Nexid srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per IOS Apple iPhone, iPod, iPad