What is the algorithm for converting a zero-suppressed, eight-digit GTIN-12 identifier (represented as a UPC-E barcode) into the full, twelve-digit version as shown in a UPC-A barcode?
The algorithm for converting a GTIN-12 identifier between UPC-E and UPC-A representation can be most clearly seen from the following pattern mapping:
SabcdeNX ⟺ SabN0000cdeX : 0≤N≤2
Sabcde3X ⟺ Sabc00000deX
Sabcde4X ⟺ Sabcd00000eX
SabcdeNX ⟺ Sabcde0000NX : 5≤N≤9
In the above S
is the number system (either 0 or 1) and X
is the check digit.
In pseudo-code it looks like this:
Input: A valid eight-digit UPC-E: Assigned to E[].
Output: PASS: Twelve-digit UPC-A representing the UPC-E.
FAIL: Reason.
if E[0] != {0-1} then FAIL: Invalid number system.
if E[6] == {0-2} then PASS: E[0..2] . E[6] . "0000" . E[3..5] . E[7]
if E[6] == "3" then PASS: E[0..3] . "00000" . E[4..5] . E[7]
if E[6] == "4" then PASS: E[0..4] . "00000" . E[5] . E[7]
if E[6] == {5-9} then PASS: E[0..5] . "0000" . E[6] . E[7]