Questo è il codice, come potete notare è molto semplice!
<?PHP |
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!