Calcolo del checkdigit di un barcode in PHP

Mattepuffo's logo
Calcolo del checkdigit di un barcode in PHP

Calcolo del checkdigit di un barcode in PHP

Supponiamo di avere i 12 caratteri di un barcode, e di voler calcolare il 13, il cosi detto check digit.

Online si trovano diversi siti che lo fanno, ma nel mio caso devo calcolarlo io in PHP.

Qui sotto la funzione, che ho anche aggiunto alla nostra classe MPUtils che trovate su GitHub.

Per testare la funzione ho preso un codice completo e levato l'ultimo numero.

Poi ho ripetuto il test su una ventina di records che ho su db.

Nel caso dell'esempio qui sotto, il codice completo finale è 0401915131566; noi controlleremo 040191513156, quindi dalla funzione deve uscire il 6.

Ecco il codice PHP:

$codice = '040191513156';

echo checkDigit($codice);

function checkDigit($valore) {
    $codiceControllo = 0;
    $calcolaValore = 0;
    $ultimaCifra = 0;
    $multiploSuperiore = 0;

    $codice = str_replace('-', '', $valore);

    $indice = 1;
    foreach (str_split(strrev($codice)) as $n) {
        if ($indice % 2 == 0) {
            $calcolaValore += $n;
        } else {
            $calcolaValore += ($n * 3);
        }
        $indice++;
    }

    $ultimaCifra = substr($calcolaValore, -1);

    switch ($ultimaCifra) {
        case 0:
            $multiploSuperiore = $calcolaValore;
            break;
        case 1:
            $multiploSuperiore = $calcolaValore + 9;
            break;
        case 2:
            $multiploSuperiore = $calcolaValore + 8;
            break;
        case 3:
            $multiploSuperiore = $calcolaValore + 7;
            break;
        case 4:
            $multiploSuperiore = $calcolaValore + 6;
            break;
        case 5:
            $multiploSuperiore = $calcolaValore + 5;
            break;
        case 6:
            $multiploSuperiore = $calcolaValore + 4;
            break;
        case 7:
            $multiploSuperiore = $calcolaValore + 3;
            break;
        case 8:
            $multiploSuperiore = $calcolaValore + 2;
            break;
        case 9:
            $multiploSuperiore = $calcolaValore + 1;
            break;
    }

    $codiceControllo = $multiploSuperiore - $calcolaValore;

    return $codiceControllo;
}

Enjoy!


Condividi

Commentami!