Categorie
Tutorial

HOWTO – Come calcolare il check digit EAN13 in Java

Calcolare control digit EAN13 in java
Un codice EAN 13

Il codice EAN13 o European Article Number 13,  è un codice utilizzato per l’identificazione univoca di articoli in vendita nell’Unione Europea. Lo troviamo, in forma di codice a barre, su praticamente ogni articolo in vendita nei supermercati e può essere letto tranquillamente da lettori  tradizionali e da smartphone Android, iOS, Symbian o RIM dotati di fotocamera. Vediamo in questo articolo un metodo Java per il calcolo della cifra di controllo di un codice EAN13.

Per le sue caratteristiche di universalità e facilità di lettura il codice EAN13 si presta molto ad usi differenti da quelli per cui è stato inizialmente progettato, come ad esempio i servizi di bigliettazione o di identificazione univoca tagliandi. In questi contesti si sfrutta il payload informativo del codice per immagazzinare un ID univoco che permetta di effettuare query verso un database contenente informazioni sul pagamento o sull’anagrafica associata ad un determinato tagliando.

Il formato del codice supporta 12 cifre (0-9) informative, mentre il 13-esimo carattere è detto check digit, ed è un carattere di controllo che ha la funzione di consentire la verifica di corretta lettura del barcode.

Il calcolo di questa cifra avviene secondo un algoritmo molto elementare, a partire dalle 12 cifre iniziali:

  1. si sommano tutte le cifre in posizione pari (partendo a contare da 0 e da sinistra, considerando lo 0 come pari) e si ottiene il valore A
  2. si sommano tutte le cifre in posizione dispari e si moltiplica la somma per 3, ottenendo il valore B
  3. il check digit si ottiene facendo la differenza fra (A+B) e la decina superiore (e.g. se (A+B) = 123 il control digit è 7, se (A+B) = 120 il control digit è 0)

L’algoritmo è molto semplice, sotto un’implementazione Java che ad ELbuild usiamo in alcune web application.

package it.elbuild.blog.test;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Luca Adamo, luca@elbuild.it
 */
public class EAN13Test {

    public static void main(String[] args) {
        String ean_ = null;
        if(args.length!=1){
            System.out.println("Please provide an input string of 12 chars.");
            System.exit(1);
        } else {
            ean_= args[0];
        }

        try {
            System.out.println("EAN: "+ean_+"\tCHK: "+getEAN13CheckDigit(ean_));
        } catch (Exception ex) {
            Logger.getLogger(EAN13Test.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    private static String getEAN13CheckDigit(String ean) throws Exception {

        if (ean.length() != 12) {
            throw new Exception("Please provide an input string of 12 chars. Current lenght: "+ean.length());
        }
        long tot = 0;

        for (int i = 0; i < 12; i++) {
            tot = tot + (Long.parseLong(String.valueOf(ean.charAt(i))) * (i % 2 == 0 ? 1 : 3));
        }
        return tot % 10 == 0 ? "0" : "" +(10-(tot % 10));
    }
}

Di Luca Adamo

Luca Adamo si è laureato con lode in Ingegneria delle Telecomunicazioni all'Università degli studi di Firenze ed è dottorando in Ingegneria Informatica, Multimedialità e Telecomunicazioni, sempre nella stessa facoltà. Le sue competenze tecniche includono lo sviluppo software, sia orientato al web che desktop, in C/C++ e Java (J2EE, J2SE, J2ME), l'amministrazione di macchine Unix-based, la gestione di reti di telecomunicazioni, ed il design di database relazionali.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *