如何将UPC-E条形码转换为UPC-A条形码?

时间:2015-07-21 12:26:31

标签: barcode

将零抑制的八位GTIN-12标识符(表示为UPC-E条形码)转换为完整的十二位数版本的算法是什么,如UPC-A条形码所示?

有没有办法在不编写代码的情况下为少量条形码实现这一目标?

2 个答案:

答案 0 :(得分:10)

从以下模式映射中可以最清楚地看到用于在UPC-E和UPC-A表示之间转换GTIN-12标识符的算法:

SabcdeNX ⟺ SabN0000cdeX  :  0≤N≤2
Sabcde3X ⟺ Sabc00000deX
Sabcde4X ⟺ Sabcd00000eX
SabcdeNX ⟺ Sabcde0000NX  :  5≤N≤9

在上面S是数字系统(0或1),X是校验位。

在伪代码中,它看起来像这样:

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]

答案 1 :(得分:1)

这与用Java编写的@Terry Burton的答案中的算法重复。


switch (data.charAt(6)) {
    case '0':
    case '1':
    case '2': {
        data = data.substring(0, 3) + "0000" + data.charAt(6) + data.substring(3, 6) + data.charAt(7);
        break;
    }
    case '3': {
        data = data.substring(0, 4) + "00000" + data.substring(4, 5) + data.charAt(7);
        break;
    }
    case '4': {
        data = data.substring(0, 5) + "00000" + data.charAt(5) + data.charAt(7);
        break;
    }
    case '5':
    case '6':
    case '7':
    case '8':
    case '9': {
        data = data.substring(0, 6) + "0000" + data.charAt(6) + data.charAt(7);
        break;
    }
}
相关问题