条形码之三九码(上)

 

<>条形码之三九码()

(附两三种制作方法)

一、39码简介
  39码是1974年发展出来的条码,是一种可供使用者双向扫描的分散式条码,也就是说两个资料码之间,必须包含一个不具任何意义的空白(或细白,其逻辑值为0),但其具有支援文字的能力,帮应用较一般条码广泛。三九码仅有两种单元宽度,分别为宽单元和窄单元。宽单元的宽度为窄单元的13倍,一般多选用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组编码,并可组合出128ASCII 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*这笔资料的检查码,其计算过程如下:


S的相对值为28

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  fnew Font("3 of 9 Barcode"24, FontStyle.Bold);
string str = "*1234ABCD*";

e.Graphics.DrawString(str, f, Brushes.Black, 10f10fnew 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)

转载于:https://www.cnblogs.com/csui2008/archive/2009/01/07/csui2008.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值