<二>条形码之三九码(上)
(附两三种制作方法)
一、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等)