<二>条形码之三九码(上)
<二>条形码之三九码(上)
(附两三种制作方法)
一、39码简介
39码是1974年发展出来的条码,是一种可供使用者双向扫描的分散式条码,也就是说两个资料码之间,必须包含一个不具任何意义的空白(或细白,其逻辑值为0),但其具有支援文字的能力,帮应用较一般条码广泛。三九码仅有两种单元宽度,分别为宽单元和窄单元。宽单元的宽度为窄单元的1到3倍,一般多选用2倍、2.5倍或3倍。三九码的每一个条码字符由九个单元组成,其中有三个宽单元,其余是窄单元,因此称为三九码。目前主要应用于工业产品、商业资料及医院的保健资料,它的最大优点是条码的长度没有强制的限定,可用大写英文字母码,且检查码可忽略不计。39码还有编码规则简单、误码率低、所能表示字符个数多等特点,因此在各个领域有着极为广泛的应用。我国也制定了相应的国家标准(GB/T 12908-91)。
二、39码的特性
标准的39码是由起始安全空间、起始码、资料码、可忽略不计的检查码、终止安全空间及终止码所构成,其所编成的39码如图所示。
综合来说,39码有以下特性:
o 条码的长度没有限制,可随着需求作弹性调整。但在规划长度的大小时,应考虑条码扫描器能允许的范围,避免条码扫描器无法读取完整的资料。
o 起始码和终止码必须固定为“*”字元。
o 允许条码扫描器进行双向的扫描处理。
o 由于39码具有自我检查能力,故检查码可有可无。
o 条码占用空间比较大。
o 可表示的资料包含有0-9的数字,A-Z的英文字母,以及“+”、“-”、“*”、“/”、“%”、“$”、“.”等特殊字符,再加上空白字元“ ”,共计44组编码,并可组合出128个ASCII CODE的字元符号,如表所示。
表:ASCII DODE 字元符号与39码对照表
ASCII |
CODE39 |
ASCII |
CODE39 |
ASCII |
CODE39 |
ASCII |
CODE39 |
NUL |
%U |
SP |
Space |
@ |
%V |
、 |
%W |
SOH |
$A |
! |
/A |
A |
A |
a |
+A |
STX |
$B |
口 |
/B |
B |
B |
b |
+B |
ETX |
$C |
# |
/C |
C |
C |
C |
+C |
EOT |
$D |
$ |
/D |
D |
D |
B |
+D |
ENQ |
$E |
% |
/E |
E |
E |
E |
+E |
ACK |
$F |
& |
/F |
F |
F |
F |
+F |
BEL |
$G |
, |
/G |
G |
G |
G |
+G |
BS |
$H |
( |
/H |
H |
H |
H |
+H |
HT |
$I |
) |
/I |
I |
I |
I |
+I |
LF |
$J |
* |
/J |
IJ |
J |
J |
+J |
VT |
$K |
+ |
/K |
K |
K |
k |
+K |
FF |
$L |
, |
/L |
L |
L |
l |
+L |
CR |
$M |
- |
. |
M |
M |
M |
+M |
SO |
$N |
. |
/0 |
N |
N |
N |
+N |
SI |
$O |
/ |
0 |
O |
O |
O |
+O |
DLE |
$P |
0 |
0 |
P |
P |
P |
+P |
DC1 |
$Q |
1 |
1 |
Q |
Q |
Q |
+Q |
Dc2 |
$R |
2 |
2 |
R |
R |
R |
+R |
Dc3 |
$S |
3 |
3 |
S |
S |
S |
+S |
DC4 |
$T |
4 |
4 |
T |
T |
T |
+T |
NAK |
$U |
5 |
5 |
U |
U |
U |
+U |
SYN |
$V |
6 |
6 |
V |
V |
V |
+V |
ETB |
$W |
7 |
7 |
W |
W |
W |
+W |
CAN |
$X |
8 |
8 |
X |
X |
X |
+X |
EM |
$Y |
9 |
9 |
Y |
Y |
Y |
+Y |
SUB |
$Z |
: |
/Z |
Z |
Z |
Z |
+Z |
ESC |
%A |
; |
%F |
[ |
%K |
{ |
%Q |
FS |
%B |
< |
%G |
" |
%L |
/ |
%R |
GS |
%C |
= |
%H |
] |
%M |
} |
%S |
RS |
%D |
> |
%I |
^ |
%N |
~ |
%T,%X |
US |
%E |
? |
%J |
- |
%0 |
DEL |
%Y,%Z |
三、39码编码方式
39码的每一个字元编码方式都是籍由九条不同排列的线条编码而得。可区分以下四种类型,如表所示。
表:39码字元编码方式
类别 |
线条形态 |
逻辑形态 |
线条数目 |
粗黑线 |
11 |
2 |
|
细黑线 |
1 |
1 |
|
粗白线 |
00 |
2 |
|
细白线 |
0 |
1 |
英文字母部分
26个英文字母所对应的39码如表所示。
表:39码编码对应表(英文字母部分)
字元 |
逻辑形态 |
字元 |
逻辑形态 |
A |
110101001011 |
N |
101011010011 |
B |
101101001011 |
O |
110101101001 |
C |
110110100101 |
P |
101101101001 |
D |
101011001011 |
Q |
101010110011 |
E |
110101100101 |
R |
110101011001 |
F |
101101100101 |
S |
101101011001 |
G |
101010011011 |
T |
101011011001 |
H |
110101001101 |
U |
110010101011 |
I |
101101001101 |
V |
100110101011 |
J |
101011001101 |
W |
110011010101 |
K |
110101010011 |
X |
100101101011 |
L |
101101010011 |
Y |
110010110101 |
M |
110110101001 |
Z |
100110110101 |
数字与特殊符号部分
39码也可以表示数字0-9以及特殊符号,其对应的逻辑值如表所示。
表:39码编码对应表(英文字母部分)
字元 |
逻辑形态 |
字元 |
逻辑形态 |
0 |
101001101101 |
+ |
100101001001 |
1 |
110100101011 |
|
100101011011 |
2 |
101100101011 |
* |
100101101101 |
3 |
110110010101 |
/ |
100100101001 |
4 |
101001101011 |
% |
101001001001 |
5 |
110100110101 |
$ |
100100100101 |
6 |
101100110101 |
. |
110010101101 |
7 |
101001011011 |
空白 |
100110101101 |
8 |
110100101101 |
|
|
9 |
101100101101 |
|
|
四、检查码的计算
39码中的检查码部分,并不是必要的部分,可依实际需要,决定加入与否,但在一般的情况下通常多半是予以省略不印,以减少编码的长度与扫描的时间。39码的检查码计算必须先利用表(检查码相对值对照表)将编码字元的相对值查出,将查出的相对值累加后再除以43,得到的余数在查出相对的编码字元,即为检查码字元。
例如,要算出*S123$5*这笔资料的检查码,其计算过程如下:
|
;1的相对值为1 |
2的相对值为2 |
;3的相对值为3 |
$的相对值为39 |
;5的相对值为5 |
步骤二 将各相对值累加除以43
累加相对值=28+1+2+3+39+5=78
78/43=1 .35
步骤三 检查出余数相对编码字元
余数=35
查表,得到相对值35之编码字元为Z故,
检查码=Z,得
含检查码在内的39码,为:*S123$5Z*
39码的检查码查询表
编码字元 |
相对值 |
编码字元 |
相对值 |
0 |
0 |
F |
15 |
1 |
1 |
G |
16 |
2 |
2 |
H |
17 |
3 |
3 |
I |
18 |
4 |
4 |
J |
19 |
5 |
5 |
K |
20 |
6 |
6 |
L |
21 |
7 |
7 |
M |
22 |
8 |
8 |
N |
23 |
9 |
9 |
O |
24 |
A |
10 |
P |
25 |
B |
11 |
Q |
26 |
C |
12 |
R |
27 |
D |
13 |
S |
28 |
E |
14 |
T |
29 |
五、三九码的制作方法
1.在Excel中制作39码
(1)安装字体 3of9.TTF(网络上很多,可先下载该字体.即把3of9.ttf复制到C:"WINDOWS"Fonts中)
(2)在Excel单元格中输入39码,然后前后加*号,再选择字体(3 of 9 Barcode)
选择字体前如图:
选择字体后如图:
2. 在C#操作Excel处理三九码(code39)
(1) 安装字体 3of9.TTF
(2) 添加引用,如图
(3) 编程:(只对在EXCEL实现三九码作简单介绍)
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
namespace Excel
{
/// <summary>
/// Class1
/// </summary>
class Class1
{
/// <summary>
/// Excel
/// </summary>
[STAThread]
public static void Main(string[] args)
{
Application exc = new Application();
if (exc == null)
{
Console.WriteLine("Error:Excel couldn't be started!");
return;
}
exc.Visible = true;
Workbooks workbooks = exc.Workbooks;
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Sheets sheets = workbook.Worksheets;
_Worksheet worksheet = (_Worksheet)sheets.get_Item(1);
Range r = worksheet.get_Range("A1", "A1");
r.ColumnWidth = 30;
r.Value2 = "*12345ABCD*";
r.Font.Name = "3 of 9 Barcode";
}
}
}
运行结果:
3. 用.NET自带的报表服务System.Drawing.ReportDocument时,
如果 2.(1),(2)然后在PrintPage事件中加入以下部分即可:
Font f= new Font("3 of 9 Barcode", 24, FontStyle.Bold);
string str = "*1234ABCD*";
e.Graphics.DrawString(str, f, Brushes.Black, 10f, 10f, new StringFormat());
运行结果:
(下讲介绍用软件CODESOFT 6 Enterprise制作39码及其它一维条码和二维条码
以及C#中用画图的方式产生39码图片,后续会介绍用C#制作一维条形码code 39
码,UPC码(Universal Product Code A,B,C,D,E),EAN码(EAN8,EAN13),128
码,ISBN码及二维条形码QR,PDF417,Datamatrix等)