Code39

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

「*WIKIPEDIA*」的 Code39 條碼

性質

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

歷史

Code39由IntermecDavid 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 AA 97 a+A
2 STX$B 34 "/B 66 BB 98 b+B
3 ETX$C 35 #/C 67 CC 99 c+C
4 EOT$D 36 $/D 68 DD 100 d+D
5 ENQ$E 37 %/E 69 EE 101 e+E
6 ACK$F 38 &/F 70 FF 102 f+F
7 BEL$G 39 '/G 71 GG 103 g+G
8 BS$H 40 (/H 72 HH 104 h+H
9 HT$I 41 )/I 73 II 105 i+I
10 LF$J 42 */J 74 JJ 106 j+J
11 VT$K 43 +/K 75 KK 107 k+K
12 FF$L 44 ,/L 76 LL 108 l+L
13 CR$M 45 -- 77 MM 109 m+M
14 SO$N 46 .. 78 NN 110 n+N
15 SI$O 47 //O 79 OO 111 o+O
16 DLE$P 48 00 80 PP 112 p+P
17 DC1$Q 49 11 81 QQ 113 q+Q
18 DC2$R 50 22 82 RR 114 r+R
19 DC3$S 51 33 83 SS 115 s+S
20 DC4$T 52 44 84 TT 116 t+T
21 NAK$U 53 55 85 UU 117 u+U
22 SYN$V 54 66 86 VV 118 v+V
23 ETB$W 55 77 87 WW 119 w+W
24 CAN$X 56 88 88 XX 120 x+X
25 EM$Y 57 99 89 YY 121 y+Y
26 SUB$Z 58 :/Z 90 ZZ 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 (PDF). Universal Postal Union. 28 October 2010.
  2. . Google Fonts. [2019-05-20]. (原始内容存档于2019-10-20).
  3. Allais, D. C. (PDF). 2006 [2010-06-02]. (原始内容存档 (PDF)于2013-01-26).
  4. . 1989-08-10 [2010-07-22]. (原始内容存档于2011-07-22).
  5. . 1997-06-19 [2011-04-06]. (原始内容存档于2011-09-27).
  6. . GNU Project. 19 February 2020 [2020-08-25]. (原始内容存档于2020-05-28).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.