条形码之三九码Word文档下载推荐.docx
《条形码之三九码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《条形码之三九码Word文档下载推荐.docx(32页珍藏版)》请在冰点文库上搜索。
![条形码之三九码Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/f567fd8b-9b85-48cd-b80e-1afac16e5e6e/f567fd8b-9b85-48cd-b80e-1afac16e5e6e1.gif)
+C
EOT
$D
$
/D
D
+D
ENQ
$E
%
/E
E
+E
ACK
$F
&
/F
F
+F
BEL
$G
,
/G
G
+G
BS
$H
(
/H
H
+H
HT
$I
)
/I
I
+I
LF
$J
*
/J
IJ
J
+J
VT
$K
+
/K
K
k
+K
FF
$L
/L
L
l
+L
CR
$M
-
.
M
+M
SO
$N
/0
N
+N
SI
$O
/
O
+O
DLE
$P
P
+P
DC1
$Q
1
Q
+Q
Dc2
$R
2
R
+R
Dc3
$S
3
S
+S
DC4
$T
4
T
+T
NAK
$U
5
U
+U
SYN
$V
6
V
+V
ETB
$W
7
W
+W
CAN
$X
8
X
+X
EM
$Y
9
Y
+Y
SUB
$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
细黑线
粗白线
00
细白线
英文字母部分
26个英文字母所对应的39码如表所示。
39码编码对应表(英文字母部分)
字元
110101001011
101011010011
101101001011
110101101001
110110100101
101101101001
101011001011
101010110011
110101100101
110101011001
101101100101
101101011001
101010011011
101011011001
110101001101
110010101011
101101001101
100110101011
101011001101
110011010101
110101010011
100101101011
101101010011
110010110101
110110101001
100110110101
数字与特殊符号部分
39码也可以表示数字0-9以及特殊符号,其对应的逻辑值如表所示。
101001101101
100101001001
110100101011
100101011011
101100101011
100101101101
110110010101
100100101001
101001101011
101001001001
110100110101
100100100101
101100110101
110010101101
101001011011
空白
100110101101
110100101101
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码的检查码查询表
编码字元
相对值
15
16
17
18
19
20
21
22
23
24
10
25
26
12
27
13
28
14
29
五、三九码的制作方法
1.在Excel中制作39码
(1)安装字体3of9.TTF(网络上很多,可先下载该字体.即把3of9.ttf复制到C:
WINDOWS"
Fonts中)
(2)在Excel单元格中输入39码,然后前后加*号,再选择字体(3of9Barcode)
选择字体前如图:
选择字体后如图:
2.
在C#操作Excel处理三九码(code39)
(1)
安装字体3of9.TTF
(2)
添加引用,如图
(3)
编程:
(只对在EXCEL实现三九码作简单介绍)
usingSystem;
usingSystem.Reflection;
usingSystem.Runtime.InteropServices;
usingMicrosoft.Office.Interop.Excel;
namespaceExcel
///<
summary>
///Class1
/summary>
classClass1
{
///Excel
[STAThread]
publicstaticvoidMain(string[]args)
Applicationexc=newApplication();
if(exc==null)
Console.WriteLine("
Error:
Excelcouldn'
tbestarted!
);
return;
}
exc.Visible=true;
Workbooksworkbooks=exc.Workbooks;
_Workbookworkbook=workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Sheetssheets=workbook.Worksheets;
_Worksheetworksheet=(_Worksheet)sheets.get_Item
(1);
Ranger=worksheet.get_Range("
A1"
"
r.ColumnWidth=30;
r.Value2="
*12345ABCD*"
r.Font.Name="
3of9Barcode"
运行结果:
3.
用.NET自带的报表服务System.Drawing.ReportDocument时,
如果2.
(1),
(2)然后在PrintPage事件中加入以下部分即可:
Font
f=
new
Font("
3
of
9
Barcode"
24,
FontStyle.Bold);
stringstr
=
*1234ABCD*"
e.Graphics.DrawString(str,
f,
Brushes.Black,
10f,
StringFormat());
4.水晶报表中显示条形码:
(1)
1>
安装字体3of9.TTF
2>
建立要显示条形码文字的公式:
如Barcode39要显示字段设为CustomerID,则可在公式编辑器中拖入CustomerID即"
*"
+CStr({Customer.CustomerID})+"
最终为"
&
CStr({Customer.CustomerID})&
"
3>
把Barcode39拖入报表要显示的地方
4>
设置Barcode39对象的字体为条形码字体
(2)
从第三方供应商购买字体库存和用户函数库(AzaleasoftwareorIDAutomation)
安装字体库,并注册用户函数库(CRUFlidautomation.dll为函数库)
Regsvr32CRUFlidautomation.dll
建立公式并在公式中使用用户函数库的函数(在附加函数中找到用户函数)
把公式拖入报表,并设置公式对象的字体为相应的条形码字体
5.使用CODESOFT6Enterprise制作条形码:
安装CODESOFT6Enterprise(网上可以下载且有破解包),并打开
Dabase:
与数据源的连接(Excel,Access等)
Date:
与日期相关和条码字段
Formule:
公式字段
Form:
变量
Tablelooup,Count,Free暂不说明
前三个选择为条形码的显示方式
从上到下依次为:
SelectObjects:
选取对象
Textgeneration:
文本生成器(设置文本字体,大小等)
Barcodegeneration:
条形码生成器(产生条码并可设置其属性,如条码大小,长短等)
Imageimport:
插入图片等对象
Externalobjectinsertion:
插入外部数据源对象
Linedrawing:
画线条对象
Rectangledrawing:
画矩形对象
Circleorellipsedrawing:
画圆形或椭圆对象
Polygondrawing:
画多边形
Obliquelinedrawing:
Roundedrectangledrawing:
画圆角矩形
添加一个变量表示数量(Qty):
选取一个Textgereration对象,做为条形码前的说明:
选取一个条形码对象(Barcodegereration):
在Symbolgy列表框中找到39码:
在Humanreadable页(易读标签页),设是否验证符,Positiont选择项中设置显示可读文字的位置(条形码的真实内容)及对齐方式等
在Character页,选择字体字形等
在数据源页选择条形码的来源(是变量还是常量,还是数据源字段等)
点击确定后:
设Qty为15.6:
此时条形为15.6:
同理再建一个日期变量:
设置日期的格式:
20090113
建立一个Qty_Date的公式:
显示数量和日期,并做为二维条码的数据源(其它二维条码与此类似)
數量和日期:
然后打印条码标签
(连续打印多个条码标签,数据源用一个字段Qty的示例,内容太多,详见PDF,本公司内部在使用)/Files/csui2008/cs6.pdf
6.用C#操作
System.Drawing.Graphics画39码(code39)
(1)条形码的内容:
stringcode=“123456789”,则验证码为2
通过函数code39_check_digit()得到验证码:
//得到验证码
privatestringcode39_check_digit(stringcode)
intnum2=0;
intnum3=Strings.Len(code);
for(inti=1;
i<
=num3;
i++)
num2+=this.code39_get_num(Strings.Mid(code,i,1));
num2=num2%0x2b;
returnthis.code39_get_char(num2);
然后在code前后加”*”号,(必须加星号读取条形码的设备才能正确识别):
code="
+code;
if(this.myAddCheckDigit)
code=code+this.code39_check_digit(code);
code=code+"
此时code="
*1234567892*"
(2)把条码字元一个一个地转化为byte型(逻辑形式),并画出来
(请参阅<
二>
条形码之三九码(上)中39码编码对应表
intnum10=Strings.Len(code);
for(inti=1;
=num10;
stringexpression=this.code39_get_pattern(Strings.Mid(code,i,1));
if(expression!
="
floatnum6=0.0F;
floatnum7=0.0F;
floatnum9=0.0F;
intnum11=Strings.Len(expression);
intstart=1;
while(start<
=num11)
floatnum8;
if(Strings.Mid(expression,start,1)=="
1"
num7=X+(num5*num2);
num6=2f*num2;
num9=Y;
num8=num;
num5+=2;
else
num6=1f*num2;
num5++;
if((start%2)==1)
ev.FillRectangle(brush,num7,num9,num6,num8);
start++;
(3)然后,确定是否要把条形码的内容显示在条形码下方,以下为显示条形码文本的程序段:
privatevoidWriteNumber(stringTITLE,floatX,floatY,floatX2,floatY2,Graphicsev)
Fontfont;
if(this.FontBold)
if(this.FontItalic)
font=newFont(this.myFontName,this.myFontSize,FontStyle.Italic|FontStyle.Bold);
font=newFont(this.myFontName,this.myFontSize,FontStyle.Bold);
elseif(this.FontItalic)
font=newFont(this.myFontName,this.myFontSize,FontStyle.Italic);
font=newFont(this.myFontName,this.myFontSize);
SolidBrushbrush2=newSolidBrush(this.myFontColor);
SolidBrushbrush=newSolidBrush(this.myFontBackGroundColor);
StringFormatformat=newStringFormat();
if(this.myPrintChar)
format.Alignment=StringAlignment.Center;
format.LineAlignment=StringAlignment.Center;
SizeFef=ev.MeasureString(TITLE,font);
floatwidth=ef.Width;
floatheight=ef.Height;
ev.FillRectangle(brush,0,Y-height,X2,height);
ev.DrawString(TITLE,font,brush2,X,Y-(height/2f),format);