PHP Validate UPC and EAN13 Barcodes

    As I couldn't find any routines to do this...

    I hacked these up in Perl an age ago... needed PHP versions so here they are (Ask if you want the Perl versions lazy..)


    function validate_UPCABarcode($barcode)
    {
    // check to see if barcode is 12 digits long
    if(!preg_match("/^[0-9]{12}$/",$barcode)) {
    return false;
    }
    $digits = $barcode;
    // 1. sum each of the odd numbered digits
    $odd_sum = $digits[0] + $digits[2] + $digits[4] + $digits[6] + $digits[8] + $digits[10];
    // 2. multiply result by three
    $odd_sum_three = $odd_sum * 3;
    // 3. add the result to the sum of each of the even numbered digits
    $even_sum = $digits[1] + $digits[3] + $digits[5] + $digits[7] + $digits[9];
    $total_sum = $odd_sum_three + $even_sum;
    // 4. subtract the result from the next highest power of 10
    $next_ten = (ceil($total_sum/10))*10;
    $check_digit = $next_ten - $total_sum;

    // if the check digit and the last digit of the barcode are OK return true;
    if($check_digit == $digits[11]) {
    return true;
    }
    return false;
    }

    function validate_EAN13Barcode($barcode)
    {
    // check to see if barcode is 13 digits long
    if(!preg_match("/^[0-9]{13}$/",$barcode)) {
    return false;
    }

    $digits = $barcode;

    // 1. Add the values of the digits in the even-numbered positions: 2, 4, 6, etc.
    $even_sum = $digits[1] + $digits[3] + $digits[5] + $digits[7] + $digits[9] + $digits[11];
    // 2. Multiply this result by 3.
    $even_sum_three = $even_sum * 3;
    // 3. Add the values of the digits in the odd-numbered positions: 1, 3, 5, etc.
    $odd_sum = $digits[0] + $digits[2] + $digits[4] + $digits[6] + $digits[8] + $digits[10];
    // 4. Sum the results of steps 2 and 3.
    $total_sum = $even_sum_three + $odd_sum;
    // 5. The check character is the smallest number which, when added to the result in step 4, produces a multiple of 10.
    $next_ten = (ceil($total_sum/10))*10;
    $check_digit = $next_ten - $total_sum;

    // if the check digit and the last digit of the barcode are OK return true;
    if($check_digit == $digits[12]) {
    return true;
    }

    return false;
    }

    Fairwell trusted companion

    After 10 years working together...

    ... it's time to say bye bye to BBedit and hello to TextMate.

    TextMate isn't as mature as BBedit, but then it's not as bloated either. I found BBedit increasingly clunky of late and TextMate answers a lot of those issuses, and has some neat extra features. Check it out if you do a lot of coding on OS X.

    Dorian Fraser-Moore

    The personal website and portfolio of designer & technologist Dorian Fraser-Moore

    Dorian Moore,Dorian Forrest Moore , Dorian, Forrest, Moore, Digital Media Technologist, DMT, PostEverything, SHOWstudio, Digital Convenience, thee mpty wrapper, the empty wrapper, mtrapr, mt_rapr, somewhere, dave gibbons, hotel, visual appliance, words, images, sounds, likes, links, works, portfolio, interfaces, programming, architecture, design, rants, raves, cynicism, dorianfm, dfm, is killing music

    Elsewhere In Between

    Mixing Narrative

    Elsewhere In Between is a project developed by Julie Myers which I helped her in the latter stages of, building a primitive video sequencer in Flash that uses a database of video clips to allow the user to make their own journey through the eyes of five film-makers in five countries.

    The composer was originally developed by Julie in conjunction with BT's R&D facility with the intention of making an interactive DVD. At a late stage in the project it became apparent that a DVD would not be able to do what was desired.

    This interface was built over 4 days to be given out on DVD to delegates to a conference organised by FACT, and used in a kiosk installations as well. Because it was built in Flash it was relatively trivial to create lower bandwidth video clips that could be played over the internet.

show menu