`
jackyqiang
  • 浏览: 12466 次
社区版块
存档分类

字符串生成条码(CODE128),并实现条码打印!

    博客分类:
  • Live
阅读更多
最近的项目有一个条码打印的要求, 鉴于很多条码软件/库 都是收费的, 一直在找免费的.

在Google上搜了很久, 资料是不少, 但不是免费的 就是 没有源码的.

于是, 决定自己写代码解决.

继续Google, 看了下CODE128的原理, 貌似挺复杂, 还分3个字符集, 比较下来 决定使用CODESET B.

先简述一下CODE128的原理吧,分别以一个unicode字符作为起始符(Ì)和终止符(Î),
然后需要根据你的字符串, 计算出当前字符集的校验码:


#region "本段为转载"

Code 128 Barcode Table
Value Code Set
A Code Set
B Code Set
C Bar/Space Pattern
B S B S B S
0 SP SP 00 2 1 2 2 2 2
1 ! ! 01 2 2 2 1 2 2
2 " " 02 2 2 2 2 2 1
3 # # 03 1 2 1 2 2 3
4 $ $ 04 1 2 1 3 2 2
5 % % 05 1 3 1 2 2 2
6 & & 06 1 2 2 2 1 3
7 ' ' 07 1 2 2 3 1 2
8 ( ( 08 1 3 2 2 1 2
9 ) ) 09 2 2 1 2 1 3
10 * * 10 2 2 1 3 1 2
11 + + 11 2 3 1 2 1 2
12 , , 12 1 1 2 2 3 2
13 - - 13 1 2 2 1 3 2
14 . . 14 1 2 2 2 3 1
15 / / 15 1 1 3 2 2 2
16 0 0 16 1 2 3 1 2 2
17 1 1 17 1 2 3 2 2 1
18 2 2 18 2 2 3 2 1 1
19 3 3 19 2 2 1 1 3 2
20 4 4 20 2 2 1 2 3 1
21 5 5 21 2 1 3 2 1 2
22 6 6 22 2 2 3 1 1 2
23 7 7 23 3 1 2 1 3 1
24 8 8 24 3 1 1 2 2 2
25 9 9 25 3 2 1 1 2 2
26 : : 26 3 2 1 2 2 1
27 ; ; 27 3 1 2 2 1 2
28 < < 28 3 2 2 1 1 2
29 = = 29 3 2 2 2 1 1
30 > > 30 2 1 2 1 2 3
31 ? ? 31 2 1 2 3 2 1
32 @ @ 32 2 3 2 1 2 1
33 A A 33 1 1 1 3 2 3
34 B B 34 1 3 1 1 2 3
35 C C 35 1 3 1 3 2 1
36 D D 36 1 1 2 3 1 3
37 E E 37 1 3 2 1 1 3
38 F F 38 1 3 2 3 1 1
39 G G 39 2 1 1 3 1 3
40 H H 40 2 3 1 1 1 3
41 I I 41 2 3 1 3 1 1
42 J J 42 1 1 2 1 3 3
43 K K 43 1 1 2 3 3 1
44 L L 44 1 3 2 1 3 1
45 M M 45 1 1 3 1 2 3
46 N N 46 1 1 3 3 2 1
47 O O 47 1 3 3 1 2 1
48 P P 48 3 1 3 1 2 1
49 Q Q 49 2 1 1 3 3 1
50 R R 50 2 3 1 1 3 1
51 S S 51 2 1 3 1 1 3
52 T T 52 2 1 3 3 1 1
53 U U 53 2 1 3 1 3 1
54 V V 54 3 1 1 1 2 3
55 W W 55 3 1 1 3 2 1
56 X X 56 3 3 1 1 2 1
57 Y Y 57 3 1 2 1 1 3
58 Z Z 58 3 1 2 3 1 1
59 [ [ 59 3 3 2 1 1 1
60 \ \ 60 3 1 4 1 1 1
61 ] ] 61 2 2 1 4 1 1
62 ^ ^ 62 4 3 1 1 1 1
63 _ _ 63 1 1 1 2 2 4
64 NUL ` 64 1 1 1 4 2 2
65 SOH a 65 1 2 1 1 2 4
66 STX b 66 1 2 1 4 2 1
67 ETX c 67 1 4 1 1 2 2
68 EOT d 68 1 4 1 2 2 1
69 ENQ e 69 1 1 2 2 1 4
70 ACK f 70 1 1 2 4 1 2
71 BEL g 71 1 2 2 1 1 4
72 BS h 72 1 2 2 4 1 1
73 HT i 73 1 4 2 1 1 2
74 LF j 74 1 4 2 2 1 1
75 VT k 75 2 4 1 2 1 1
76 FF I 76 2 2 1 1 1 4
77 CR m 77 4 1 3 1 1 1
78 SO n 78 2 4 1 1 1 2
79 SI o 79 1 3 4 1 1 1
80 DLE p 80 1 1 1 2 4 2
81 DC1 q 81 1 2 1 1 4 2
82 DC2 r 82 1 2 1 2 4 1
83 DC3 s 83 1 1 4 2 1 2
84 DC4 t 84 1 2 4 1 1 2
85 NAK u 85 1 2 4 2 1 1
86 SYN v 86 4 1 1 2 1 2
87 ETB w 87 4 2 1 1 1 2
88 CAN x 88 4 2 1 2 1 1
89 EM y 89 2 1 2 1 4 1
90 SUB z 90 2 1 4 1 2 1
91 ESC { 91 4 1 2 1 2 1
92 FS | 92 1 1 1 1 4 3
93 GS } 93 1 1 1 3 4 1
94 RS ~ 94 1 3 1 1 4 1
95 US DEL 95 1 1 4 1 1 3
96 FNC 3 FNC 3 96 1 1 4 3 1 1
97 FNC 2 FNC 2 97 4 1 1 1 1 3
98 SHIFT SHIFT 98 4 1 1 3 1 1
99 CODE C CODE C 99 1 1 3 1 4 1
100 CODE B FNC 4 CODE B 1 1 4 1 3 1
101 FNC 4 CODE A CODE A 3 1 1 1 4 1
102 FNC 1 FNC 1 FNC 1 4 1 1 1 3 1
103 Start A Start A Start A 2 1 1 4 1 2
104 Start B Start B Start B 2 1 1 2 1 4
105 Start C Start C Start C 2 1 1 2 3 2
106 Stop Stop Stop 2 3 3 1 1 1 2



Example... To calculate the check digit for the barcode data string 'Code 128'

                              Value      Total
      =====                  =====
             Start Code B      104                    104
Position 1              C       35         1 x 35 =    35
Position 2              o       79         2 x 79 =   158
Position 3              d       68         3 x 68 =   204
Position 4              e       69         4 x 69 =   276
Position 5                       0         5 x  0 =     0
Position 6              1       17         6 x 17 =   102
Position 7              2       18         7 x 18 =   126
Position 8              8       24         8 x 24 =   192
                                                     =====
                                                     1197
                                                     =====
             1197/103 = 11 remainder 64

#endregion

即根据上表, 把没个字符的value值 乘上 字符在字符串中的位置(从1开始算)

把没个乘积加起来

因为CODESET B 为104(这是规定, 不要问我为什么)

所以, 还要加上 104

最后, 除以103, 所得的余数就是 校验码 的value值, 然后在表中找到对应的字符

就可以了.



有心人应该注意到了, value>=95的时候, 是没有字符的(事实上还是有的,

只不过是unicode字符)

好了, 原理就阐述到这里, 还有什么不懂的话, 大家看看代码好了.

至于用在水晶报表上的问题, 我这里是配合条码字体的, 我会上传一个我正在用的字体.

代码如下:

Public Function StringToCode128(ByVal input As String) As String
        Try
            Dim endchar As Char

            Dim total As Int64 = 104
            Dim tmp As Integer

            For i As Int16 = 1 To input.Length
                tmp = Asc(input.Substring(i - 1, 1))

                If tmp >= 32 Then
                    total += (tmp - 32) * i
                Else
                    total += (tmp + 64) * i
                End If
            Next

            Dim endAsc = total Mod 103

            If endAsc >= 95 Then
                Select Case endAsc
                    Case 95
                        endchar = "Ã"
                    Case 96
                        endchar = "Ä"
                    Case 97
                        endchar = "Å"
                    Case 98
                        endchar = "Æ"
                    Case 99
                        endchar = "Ç"
                    Case 100
                        endchar = "È"
                    Case 101
                        endchar = "É"
                    Case 102
                        endchar = "Ê"
                End Select
            Else
                endAsc += 32
                endchar = Chr(endAsc)
            End If

            Return "Ì" & input & endchar.ToString() & "Î"

        Catch ex As Exception
            WriteLog(ex.Message, ex.StackTrace)
            Return String.Empty
        Finally

        End Try
    End Function



我放大一下上面用到的特殊字符,大家看看清楚:

起始符:Ì

终止符:Î

value95:Ã



value96:Ä



value97:Å



value98:Æ



value99:Ç



value100:È



value101:É



value102:Ê
分享到:
评论
1 楼 senbao18 2008-03-31  
收藏了,谢谢啦!

相关推荐

    VB.net 生成条形码code128条码.rar

    VB.net绘制生成code128条形码的例子,另外还有EAN128、包括了Code128 A/B/C类型的条形码,程序非常好用,在文本框输入规定要求的数据,即时输入,即时生成。程序中为生成条形码,创建了一些函数,比如显示可见条码...

    C# 生成Code128 条形码并调用TSC打印

    本资源专注于使用C#编程语言生成Code128条形码,并通过TSC打印机进行实际打印操作。Code128条形码是一种广泛应用的条形码标准,能够编码ASCII字符集中的所有128个字符,因此在工业、物流、零售等领域非常常见。 ...

    PB版code128条形码图片生成

    在PowerBuilder(PB)环境中生成Code128条形码图片,可以帮助开发者在软件中实现数据的快速识别和记录。本篇将详细介绍如何在PB9版本中创建Code128条形码图像。 首先,了解Code128条形码的基本结构和特点: 1. Code...

    winform条形码Code128B生成打印

    总结来说,在Winform应用中生成和打印Code128B条形码,需要理解条形码的编码规则,选择合适的库,创建并配置条形码对象,然后在适当的位置绘制和打印图像。这个过程涉及图形编程、打印技术和第三方库的使用,对...

    code128 条码生成 qt

    在实际应用中,开发者可以先将这两个源文件加入到Qt项目中,然后在需要生成条码的地方实例化`Code128`对象,传递待编码的字符串,接着调用`draw()`或`render()`方法,将生成的条码显示在用户界面上。这样的设计使得...

    条码CODE128C语言算法

    - 一维码CODE128广泛应用于物流、库存管理、零售等领域,C语言实现的算法可以集成到嵌入式系统或者桌面应用中,提供快速且可靠的条码生成能力。 8. **开发注意事项** - 考虑兼容性,确保生成的条码符合国际标准。...

    Asp代码 Code128条码生成

    参数说明: CodeStr-条码字符串 参数说明: Width-条码单码宽度 参数说明: Height-条码高度 参数说明: TextOf-条码是否显示文字 参数说明: CodeType-条码类型,0_Auto 1_128A 2_128B 3_128C 引用方法:&lt;img src="...

    字符串转条形码生成bitmap

    这个压缩包文件的标题"字符串转条形码生成bitmap"表明它提供了一种方法,能够将输入的字符串转换为条形码图像(bitmap),这是一种常见的数字图像格式。这通常涉及编程技术,特别是使用C++语言,因为标签中提到了...

    pb条形码(128码)生成

    通过这个项目,你可以学习如何处理字符串长度变化对条形码生成的影响,以及如何优化不同长度字符串的生成效率和扫描成功率。 在自定义条形码生成程序时,需要注意兼容性和性能优化。例如,确保生成的条形码在各种...

    pb打印条码(39code,128code)

    "pb打印条码(39code,128code)"这个主题主要涉及到两种常见的条码编码标准:Code 39和Code 128,接下来将详细介绍这两个条码类型及其在Print Basic(PB)中的实现。 Code 39,也被称为美国39码或USD-3,是最早的一维...

    jQuery自定义字符串生成条形码

    本文将深入探讨如何使用jQuery自定义字符串来生成条形码,这是一个在网页应用中常见的需求,尤其在商品信息展示或库存管理等方面。 一、jQuery库的基本介绍 jQuery是由John Resig于2006年创建的,它的核心理念是...

    C#实现条形码CODE128

    综上所述,通过C#实现条形码CODE128涉及到对CODE128编码规则的理解,使用特定的条形码字体,以及编写或引用已有的源码来生成条形码图像。在实际项目中,开发者可以根据需求选择直接调用库函数,或者自定义绘制条形码...

    code128 模式C 条形码 打印

    其中,`PrintCodeBar`接口函数是关键,它负责将输入的数字字符串转化为Code128C模式的条形码图像,并将其输出到打印机或者显示设备。 `PrintCodeBar`函数可能包含以下步骤: 1. **输入预处理**:首先,检查输入...

    C#生成条形码源代码

    在bar_code方法中,我们可以看到使用了string类型的变量strTmp来存储要生成条形码的字符串,并使用ToLower()方法将字符串转换为小写形式的副本。然后,代码使用Replace()方法将字符串中的数字和字母替换为对应的条形...

    CODE128和CODE39条形码生成打印代码

    本文将深入探讨两种常见的条形码类型:CODE128和CODE39,以及如何生成和打印它们的代码。 首先,CODE39,也称为美国39码或USD-3,是最早的一维条形码标准之一,它支持数字(0-9)、大写字母(A-Z)以及一些特殊字符...

    code128条码打印 c# net

    2. **生成Code128条码字符串**:根据需要编码的数据,计算出对应的Code128条码字符串,包括起始字符、数据字符、校验字符和终止字符。C#中可以编写一个函数来完成这个任务,考虑到ASCII字符集,可能需要用到`...

    pb生成条形码

    这段代码会生成一个Code 128条形码,其中包含字符串"1234567890",并将条形码保存为PNG图像文件"barcode.png"。这个过程涉及到了Pike的类和对象,以及文件操作。 在实际应用中,你可能还需要考虑其他因素,如条形码...

    Code128根据字符生成对应条形码,常用于快递面单的条形码生成,超实用

    综上所述,生成Code128条形码在C#编程中涉及了数据编码、图像处理、错误校验等多个方面,是实现物流追踪和自动化识别的关键技术之一。在具体实践中,开发者需要选择合适的库、理解条形码编码规则,并进行充分的测试...

    CODE128码在PB中的实现.doc

    总之,实现CODE128条形码在PB中主要是通过自定义函数`f_getcode128()`,该函数基于ASCII码值和字符位置进行计算,生成符合CODE128B编码规则的条形码字符串。这个过程包括编码计算、校验码计算以及条码字符串的组合,...

    c#--Code 128 Auto -21位纯数字条形码生成工具

    总的来说,创建一个C#的Code 128 Auto 条形码生成工具涉及了对条形码编码规则的理解、字符串转换、图像生成和错误校验等多个技术环节。通过这个工具,开发者可以快速为他们的应用程序提供条形码生成功能,从而提高...

Global site tag (gtag.js) - Google Analytics