2012-11-29 119 views
4

很少有QR編碼器/解碼器對所謂的GS1編碼有(明確的)支持。 Zint是一個例外(在QR select GS-1數據模式下),但其許可證阻止我使用它。商業性優惠主要來自Tec-It,價格昂貴,尤其是因爲我對其他支持的其他條形碼不感興趣。QR編碼器/解碼器支持GS1嗎?

有沒有辦法來GS1支持添加到任何QR編碼器/解碼器,而不改變它的來源?例如,我是否可以應用一些算法將文本GTIN AI數據轉換爲兼容二進制文件?我認爲這應該是可能的,因爲畢竟它仍然是QR。請注意,我不是一個數據編碼專家 - 我只是在尋找一種方法來處理這個標準而無需付出一點錢。到目前爲止,我發現postscriptbarcode確實支持它,並且似乎使用它自己的QR引擎,但輸出質量一般,我的PostScript技能太有限,無法找出算法。

+0

GS1意味着很多事情。您對哪種格式和內容感興趣? zxing已經支持很多已經重新貼上「GS1條形碼」的內容。 –

+0

@SeanOwen我不是指特殊的GS1 DataBars。我在說「GS1 QR」。要明白我的意思,打開Zint並在QR選擇GS-1數據模式下。 –

+0

遊戲後期,但我會很感興趣的是瞭解postscriptbarcode的「輸出質量如此之好」。該庫生成的矢量圖形在適當縮放時可以保持完美的質量。 –

回答

5

只要庫支持FNC1特殊字符的解碼,它可以被用來讀取GS1代碼。 FNC1字符不是數據流中的字節,而是更多的格式符號。

說明書說,領先FNC1字符被用於識別GS1條形碼,並且應該被解碼爲"]d2"(GS1的DataMatrix)"]C1"(GS1-128)"]e0"(GS1的DataBar全方位)或"]Q3"(GS1 QR碼)。任何其他FNC1字符都應解碼爲ASCII GS字符(字節值29)。

根據庫的不同,可能會丟失領先的FNC1或將其解碼爲GS(不重要),或者嵌入的FNC1字符可能會丟失(嚴重)。嵌入的FNC1字符用於分隔變長字段。

你可以閱讀完整的規範here(PDF)。用於對數據進行解碼,該算法可以使用GS1應用標識符(頁426)從一個符號GS1標題7.9資料處理下找到。

該算法是這樣的:

Peek at the first character. 
If it is ']', 
    If string does not start with ']C1' or ']e0' or ']d2' or ']Q3', 
     Not a GS1 barcode. 
     Stop. 
    Consume the caracters. 
Else if it is <GS>, 
    Consume character. 
Else, 
    No symbology identifier, assume GS1. 
While not end of input, 
    Read the first two digits. 
    If they are in the table of valid codes, 
     Look up the length of the AI-code. 
     Read the rest of the code. 
     Look up the length of the field. 
     If it is variable-length, 
      Read until the next <FNC1> or <GS>. 
     Else, 
      Read the rest if the field. 
     Peek at the next character. 
     If it is <FNC1> or <GS>, consume it. 
     Save the read field. 
    Else, 
     Error: Invalid AI 

在QR碼二進制數據被編碼爲4位令牌,帶有嵌入的數據。

0111 -> Start Extended Channel Interpretation (ECI) Mode (special encodings). 
0001, 0010, 0100, 1000 -> start numeric, alphanumeric, raw 8-bit, kanji encoded data. 
0011 -> structured append (combine two or more QR Codes to one data-stream). 
0101 -> FNC1 initial position. 
1001 -> FNC1 other positions. 
0000 -> End of stream (can be omitted if not enough space). 

編碼規範出現後,數據長度,其次是實際數據。數據位的含義取決於使用的編碼。在數據塊之間,您可以擠壓FNC1字符。

QR碼規範(ISO/IEC 18004)不幸的是費錢(210法郎)。雖然你可能會在網上找到一些海盜版本。

要創建GS1 QR代碼,你需要能夠在數據指定FNC1字符。庫應該識別「] Q3」前綴和GS字符,或允許您通過其他方法編寫FNC1令牌。

如果你有某種方式來寫FNC1字符,你可以編碼GS1數據如下:

Write initial FNC1. 
For each field, 
    Write the AI-code as decimal digits. 
    Write field data. 
    If the code is a variable-length field, 
     If not the last field, 
      Write FNC1 to terminate the field. 

如果可能的話,你應該命令字段,例如,一個可變長度字段排在最後。


正如Terry Burton在評論中指出的那樣; GS1 QR碼中的FNC1符號可以按字母數字數據編碼爲%,在字節模式下可編碼爲GS。要編碼實際百分比符號,請將其編寫爲%%

要編碼(01) 04912345123459 (15) 970331 (30) 128 (10) ABC123,首先將其組合成數據字符串01049123451234591597033130128%10ABC123%指示符是編碼的FNC1符號)。然後,該字符串被寫入作爲

0101 - Initial FNC1, GS1 mode indicator 
0001 - QR numeric mode 
0000011101 - Data length (29) 
<data bits for "01049123451234591597033130128"> 
0010 - QR alphanumeric mode 
000001001 - Data length (9) 
<data bits for "%10ABC123"> 

(來自ISO 18004實施例:2006規格)

+0

所以基本上GS1只是帶有很多格式化規則的字母數字QR,而不是它自己的第五種編碼?我將花一些時間來研究該文件。但是,我更感興趣的是生成GS1 QR代碼,因此如果您可以舉例說明如何使用不含特定GS1模式的「常規」QR編碼器來輸出GS1,這將確保接受的答案。 –

+0

@ThijsvanDien是否能夠爲gs1 datamatrix提供常規qr閱讀器? – vinnybad

+0

@vinnybad我只對GS1 QR感興趣。 –