_E_NO_IMAGELa ditta per la quale lavoro si è asociata ad INDICOD per la gestione dei codici EAN per i propri prodotti. Mi è stata richiesta la lista di tutti i codici che ci sono stati assegnati. Su internet non sono riuscito a trovare nulla che facesse al mio caso e, onde evitare che i colleghi debbano creare il codice ean di volta in volta utilizzando il tool online di INDICOD o un software per la stampa dei barcode, ho deciso di scrivere in PHP un tool che, dato il codice iniziale e quello finale, generi tutti i codici EAN13 intermedi, calcolandone anche il carattere di controllo

Questo è il codice, come potete notare è molto semplice!

 

<?PHP

//IMPOSTO IL MOLTIPLICATORE
$MOLTIPLICATORE = 3;

//RIPETO TUTTE LE OPERAZIONI PER OGNI CODICE INDICOD ASSEGNATO

for ($INDICOD=801234567000; $INDICOD<801234568000; $INDICOD++)
    {


        //IMPOSTO A 0 IL VALORE DELL'ADDENDO PER IL CALCOLO
        //DELLA CIFRA DI CONTROLLO

        $ADDENDO = 0;
        
        //AVVIO IL CICLO CHE GENERA LA CIFRA DA SOTTRARRE AL MULTIPLO DI 10
        for ($i=0; $i<12; $i++)
        {
                //CONVERTO IL CODICE INDICOD IN STRINGA
                //ED ESTRAPLO IN SUCCESSIONE TUTTE LE CIFRE

                $FATTORE = substr(strval ( $INDICOD ), $i, 1);
               
     
           //CONTROLLO SE STO PER ELABORARE UNA CIFRA IN POSIZIONE
                //PARI O DISPARI NEL CODICE EAN
                //SE E' PARI LA SOMMO ALL'ADDENDO
                //SE E' DISPARI LA MOLTIPLICO PER IL MOLTIPLICATORE
                //SPECIFICATO IN APERTURA

                if (($i % 2) == 1)
                    {
                        $FATTORE = $FATTORE *3;
                    }
                $ADDENDO = $ADDENDO + $FATTORE;
               
        }
       
        //PER DETERMINARE IL MULTIPLO DI 10 MAGGIORE O UGUALE ALL'ADDENDO
        //DIVIDO L'ADDENDO PER 10 ARROTONDANDO IN ECCESSO IL RISULTATO

       
        $MULTIPLO = ceil($ADDENDO/10) * 10;
       
        //UNA VOLTA OTTENUTO L'ADDENDO ED IL MULTIPLO DI 10
        //SOTTRAGGO L'ADDENDO AL MULTIPO
        //OTTENENDO IL CARATTERE DI CONTROLLO

       
        $CONTROLLO = $MULTIPLO - $ADDENDO;
       
        //QUIDNI IL CODICE EAN13 SARA' LA CONCATENAZIONE DEL CODICE
        //INDICOD E DEL CARATTERE DI CONTROLLO

        $EAN13 = $INDICOD.$CONTROLLO;
        ECHO $EAN13."<br />";
    }




?>
 

 

 


Per prima cosa vediamo di capire come funziona la genrazione del carattere di controllo.

Questo carattere vienegenerato automaticamente dai vari softweare addetti alla gestione del codice EAN ed ha il compito di aiutare l'operatore a prevenire gli errori di battitura del codice.

Per calcolarlo occorre prendere in considerazione ogni singola cifra del codice INNDICOD.

Tale codice è composto da 2 cifre iniziali che indicano la ditta (80 indicano l'italia), le seguenti 7 cifre indicano la ditta produttrice dell'articolo. Le restanti 3 cifre sono un progressivo che identifica l'articolo.

Prendiamo ad esempio il codice indicod 801234567000.

Le cifre 80 indicano che la ditta è italiana.

Le cifre 1234567 indicano la ditta.

Le cifre 000 indicano il prodotto. 

Iniziamo allora col prendere in esame solo le cifre posizionate in un indice paro all'interno del codice, ovvero le cifre 0,2, 4, 6, 8, e 10, ovvero i valori 8, 1, 3, 5, 7, 0

indice  0  1  2  3  4  5  6   7   8   9  10   11 
 codice  8 
 0 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 0 
 0
 0 

 

sommandoli otterremo 24.

Prendiamo in considerazione ora i restanti numeri: 0, 2, 4, 6, 0, 0. Moltiplichiamoli per 3 e sommiamo i riusltati, ottenendo  36, che sommato al risultato del calcolo di prima dà 60.

A questo punto dobbiamo individuare il multiplo di dieci maggiore o uguale al numero che abbiamo ottenuto. 60 è il multiplo di 10 uguale al risultato. Sottraendo il risultato ottenuto al multiplo otteniamo il carattere di controllo, in questo caso 60-60 da 0.

Anche il 13°  carattere è stato individuato, completiamo il codice INDICODE con il carattere di controllo ed otteniamo il codice EAN pronto per la stampa del BARCODE o per l'associazione ad una referenza nel nostro gestionale.

 

Nel codice gli unici punti di interesse sono il calcolo dell'indice pari o dispari ed il calcolo del multiplo di 10.

Il controllo  

        if (($i % 2) == 1 )

esegue l'operazione modulo restituendo il resto della divisione del contatore $i per due. Logicamente se il resto è 0 l'indice, rappresentato dal contatore, è pari e quindi non ho bisogno di moltiplicare il valore della cifra in considerazione.

Viceversa, se il risultato è 1 allora l'indice è dispari e devo moltiplicare il valore della cifra per tre.

 

L'operazione 

        $MULTIPLO = ceil($ADDENDO/10) * 10; 

La funzione ceil(), arrotonda un numero per eccesso, cioè al numero intero superiore. Eseguendo una divisione per 10 all'interno della funzione, otterremo il moltiplicando.

Ad esempio ceil di 25:10 restituisce 3 che moltiplicato per 10 da 30, il multiplo di 10 più alto o uguale a 25.

 

Sepro che questo breve vi torni utile, io ci ho dovuto perdere un po' di tempo per capire bene il funzionamento dei codici EAN e del BARCODE GS1!

We use cookies
Attenzione! Questo sito utilizza i cookie tecnici e di terze parti per poter fornire i servizi.