跳至內容

Code39

維基百科,自由的百科全書
「*WIKIPEDIA*」的 Code39 條碼

Code39(也稱為Alpha39Code 3 of 9Code3/9Type 39USS Code39USD-3)是 ISO/IEC 16388:2007 中定義的一種不固定長度的條碼。可以表示43個字元,包含大寫拉丁字母(A到Z)、數字(0到9)和幾個特殊字元(-、.、$,/、+、%與空格)。另有一個外加符號作為終止符號(標示為「*」)。每個字元由九個部份組成:五條線與和四個空格,當中三個部份較寬(二進位1),六個較窄。窄與寬之間的比例並不重要,在1:2和1:3之間都可。

性質

Code39本身不包含校驗位(與Code 128不同),但是由於單點錯誤不會對應到另一個有效的編碼,因此可以算是自我校驗碼。Code39的最嚴重缺點可能是其數據密度低,與Code 128相比需要更多空間。這表示小型商品不易使用Code39條碼。但是,某些郵政系統仍然使用Code39(儘管萬國郵政聯盟建議在所有情況下都使用Code 128 [1] )。Code39的幾個個優點是,只要增加條碼字體,就能夠用現有的印刷系統印出條碼,因為Code39不需要計算校驗位置。[2]而且幾乎所有的條碼掃描器都能解碼。

歷史

Code39由Intermec英語IntermecDavid Allais英語David Allais與Ray Stevens在1974年開發。原始設計是使用兩條粗線與一個寬空格來表示一個字元,總共可以表示40個符號。再保留其中一個作為開始與終止符號,剩下39個符號,這也是Code39的名稱來源。[3]之後加入了四個標點符號,並排除粗線與三格寬的空格的編碼,將字元集擴展為43個字元。Code39被標準化為ANSI MH 10.8 M-1983和MIL-STD-1189。[4]後者已被取消,並由ANSI/AIM BC1/1995〈Uniform Symbology Specification — Code39〉代替。[5]

編碼方式

下面顯示的「*」字元不是真正的可編碼字元,而是開始與終止符號,其不對稱性使閱讀器可以確定所掃描條形碼的方向。這個符號通常會對映到「*」字元,並且會與條碼內容一起以人類可讀格式印出。

Code39的字元

一般來說,兩條粗線的位置可以視為對數字1至10編碼;而寬空格的位置(具有四個可能)可視為將字元分為四組(從左到右):

  1. 「字母(+30)」:U至Z
  2. 「數字(+0)」:1至9與0
  3. 「字母(+10)」:A至J
  4. 「字母(+20)」:K至T

最後剩下的四個字元只由細線、三個寬空格與一格窄空格組成。窄空格有四個可能的位置。

例如,字母P(第16個字母)的粗線位置與數字6相同,寬空格則放在「字母(+20)」的位置。

在表示數字時,0會用「數字(+0)」的「10」表示。另外因為「字母(+30)」組中只有六個字母(U至Z),因此該組中的其他四個位置(36至39)用於表示「-」、「.」、空格以及開始/終止符號。

兩條粗線則用五個可能的位置使用五取二碼(每一位分別表示1、2、4、7或0)表示1到10之間的數字。例如數字6被編碼為「|▮▮||」,粗線位在2和4的位置(2+4=6)。而「||▮▮|」的數值為4+7=11表示數字0 。 在對(+10至+30)的字母進行編碼時,算式需要添加「 -1」,因此字母「A」的編碼為「▮|| |▮」,對應的數值為1+10−1=10。

下表是Code39的符號表。每個字元(除了開始/終止符號)的數值會在下節的校驗演算法中使用。

Code39 字元 (與校驗和)
線條 寬空格
|| ||| +0 ||| || +10 |||| | +20 | |||| +30
▮|||▮ 1 ▮| ||▮ 1 1 ▮|| |▮ A 10 ▮||| ▮ K 20 ▮ |||▮ U 30
|▮||▮ 2 |▮ ||▮ 2 2 |▮| |▮ B 11 |▮|| ▮ L 21 | ▮||▮ V 31
▮▮||| 3 ▮▮ ||| 3 3 ▮▮| || C 12 ▮▮|| | M 22 ▮ ▮||| W 32
||▮|▮ 4 || ▮|▮ 4 4 ||▮ |▮ D 13 ||▮| ▮ N 23 | |▮|▮ X 33
▮|▮|| 5 ▮| ▮|| 5 5 ▮|▮ || E 14 ▮|▮| | O 24 ▮ |▮|| Y 34
|▮▮|| 6 |▮ ▮|| 6 6 |▮▮ || F 15 |▮▮| | P 25 | ▮▮|| Z 35
|||▮▮ 7 || |▮▮ 7 7 ||| ▮▮ G 16 |||▮ ▮ Q 26 | ||▮▮ - 36
▮||▮| 8 ▮| |▮| 8 8 ▮|| ▮| H 17 ▮||▮ | R 27 ▮ ||▮| . 37
|▮|▮| 9 |▮ |▮| 9 9 |▮| ▮| I 18 |▮|▮ | S 28 | ▮|▮| 38
||▮▮| 10 || ▮▮| 0 0 ||▮ ▮| J 19 ||▮▮ | T 29 | |▮▮| *
||||| | | | || $ 39 | | || | / 40 | || | | + 41 || | | | % 42

每個字元會用一個窄空格隔開。例如,字母「A」完整編碼實際上會加上開始/終止符號,變成「*A*」,對應的條碼為「| |▮▮|▮|| |▮| |▮▮|」。只要沒有這些空格,就無法正確讀取條碼,因此條碼字體必須要包含這個窄空格。

Code39 mod 43

Code39有時會加上43的校驗位。這個功能需要在另外在讀取器中開啟。加上校驗位的條碼稱為「Code39 mod 43」

每個字元都被分配到一個數值。可以參考上表。

這是校驗和的計算方法:

  • 計算條碼中所有字元(除了開始/終止符號)的數值總和
  • 將結果除以43
  • 餘數即為校驗和字元的數值

完整的ASCII Code39

Code39僅能表示34個字元。在ASCII Code39中,0至9、A至Z、「.」、「,」以及空格的符號與Code39相同。小寫字母、其他標點符號和控制字元則由兩個Code39符號表示。

編碼表
數值 字元 編碼 數值 字元 編碼 數值 字元 編碼 數值 字元 編碼
0 NUL %U 32 [space] [space] 64 @ %V 96 ` %W
1 SOH $A 33 ! /A 65 A A 97 a +A
2 STX $B 34 " /B 66 B B 98 b +B
3 ETX $C 35 # /C 67 C C 99 c +C
4 EOT $D 36 $ /D 68 D D 100 d +D
5 ENQ $E 37 % /E 69 E E 101 e +E
6 ACK $F 38 & /F 70 F F 102 f +F
7 BEL $G 39 ' /G 71 G G 103 g +G
8 BS $H 40 ( /H 72 H H 104 h +H
9 HT $I 41 ) /I 73 I I 105 i +I
10 LF $J 42 * /J 74 J J 106 j +J
11 VT $K 43 + /K 75 K K 107 k +K
12 FF $L 44 , /L 76 L L 108 l +L
13 CR $M 45 - - 77 M M 109 m +M
14 SO $N 46 . . 78 N N 110 n +N
15 SI $O 47 / /O 79 O O 111 o +O
16 DLE $P 48 0 0 80 P P 112 p +P
17 DC1 $Q 49 1 1 81 Q Q 113 q +Q
18 DC2 $R 50 2 2 82 R R 114 r +R
19 DC3 $S 51 3 3 83 S S 115 s +S
20 DC4 $T 52 4 4 84 T T 116 t +T
21 NAK $U 53 5 5 85 U U 117 u +U
22 SYN $V 54 6 6 86 V V 118 v +V
23 ETB $W 55 7 7 87 W W 119 w +W
24 CAN $X 56 8 8 88 X X 120 x +X
25 EM $Y 57 9 9 89 Y Y 121 y +Y
26 SUB $Z 58 : /Z 90 Z Z 122 z +Z
27 ESC %A 59 ; %F 91 [ %K 123 { %P
28 FS %B 60 < %G 92 \ %L 124 | %Q
29 GS %C 61 = %H 93 ] %M 125 } %R
30 RS %D 62 > %I 94 ^ %N 126 ~ %S
31 US %E 63 ? %J 95 _ %O 127 DEL %T, %X, %Y, %Z

軟件

下列自由與開源的軟件可以產生Code39條碼:

參考文獻

  1. ^ As one example of an international standard, see Identification of postal items – 13-character identifier (PDF). Universal Postal Union. 28 October 2010. [失效連結]
  2. ^ Google Fonts. Google Fonts. [2019-05-20]. (原始內容存檔於2019-10-20). 
  3. ^ Allais, D. C. AIDC Memoirs (PDF). 2006 [2010-06-02]. (原始內容存檔 (PDF)於2013-01-26). 
  4. ^ MIL-STD-1189 Standard Department of Defense Barcode Symbology. 1989-08-10 [2010-07-22]. (原始內容存檔於2011-07-22). 
  5. ^ Adoption Notice: AIM/BC1 Uniform Symbology Specification. 1997-06-19 [2011-04-06]. (原始內容存檔於2011-09-27). 
  6. ^ GNU Barcode. GNU Project. 19 February 2020 [2020-08-25]. (原始內容存檔於2020-05-28).