How to convert a UPC-E barcode to a UPC-A barcode?

前端 未结 2 1525
别跟我提以往
别跟我提以往 2020-12-11 22:20

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

相关标签:
2条回答
  • 2020-12-11 22:50

    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]
    
    0 讨论(0)
  • 2020-12-11 23:06

    This duplicates the algorithm in @Terry Burton's answer, written in Java.

    
    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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题