Recently I had the need to convert 8 digit UPC-E barcodes to 12 digit UPC-A barcodes for an inventory app I was working on.
After lots of Googling, I found this one written in Visual Basic: http://upcdata.info/?action=e2a
And did my best to convert it to PHP. The results are below. Let me know if it does/doesn’t work for you.
function fixedUPC($upc) { $valid_digits = substr($upc,1,6); $last_digit = substr($valid_digits,-1); switch($last_digit) { case "0": case "1": case "2": $upc_a = substr($valid_digits,0,2) . $last_digit . "0000" . substr($valid_digits,2,3); break; case "3": $upc_a = substr($valid_digits,0,3) . "00000" . substr($valid_digits,3,2); break; case "4": $upc_a = substr($valid_digits,0,4) . "00000" . substr($valid_digits,5,1); break; default: $upc_a = substr($valid_digits,0,5) . "0000" . substr($valid_digits,5,1); } return substr($upc,0,1) . $upc_a . substr($upc,-1); }