使用.NET处理条形码

在零售、仓储系统中经常会遇到对条形码的处理需求。大多说情况下,我们选择了购买第三方控件来完成条形码的操作处理。下面我给大家讲解一个条形码编码、绘制的.NET类库,为大家节约购买第三方控件的银子。(最初源代码是由Brad Barnhill 提供,我在此基础上作了超过50%以上的修改)

下面显示的是类关系的全貌:

 

l  BarcodeFacade类是条形码类库的对外接口, 所有的调用只能使用它提供的接口。

它提供了一下接口:

Ø  Encode :把传入的字符串编译成二进制编码,并返回。

Ø  Decode :把传入的二进制编码解析成员字符串,并返回

Ø  GetBarcodeImage :把传入的字符串编译成二进制编码后,返回条形码图片。

Ø  GetBarcodeImageWithLabel :把传入的字符串编译成二进制编码后,返回下方带有原字符串的图片。

Ø  GetImageData :把传入的字符串编译成二进制编码后,返回位图字节数组。

Ø  SaveImage :把生成的位图保存成文件(支持JPG, BMP, PNG, GIF, TIFF,)。


 

l  BarcodeType

Ø  枚举了所有支持的条形码:

UPCA,

UPCE,

UPC_SUPPLEMENTAL_2DIGIT,

UPC_SUPPLEMENTAL_5DIGIT,

EAN13,

EAN8,

Interleaved2of5,

Standard2of5,

Industrial2of5,

CODE39,

CODE39Extended,

Codabar,

PostNet,

BOOKLAND,

ISBN,

JAN13,

MSI_Mod10,

MSI_2Mod10,

MSI_Mod11,

MSI_Mod11_Mod10,

Modified_Plessey,

CODE11,

USD8,

UCC12,

UCC13,

LOGMARS,

CODE128,

CODE128A,

CODE128B,

CODE128C,

ITF14,

CODE93


 

l  AbstractBarcode

条形码的抽象类,所有的条形码类必须继承于AbstractBarcode 。它抽象了如下接口:

Ø  EncodedValue :二进制条形码

Ø  RawData :要编码的字符串

Ø  CheckNumericOnly : 数字合法性检查

Ø  ClearObject :清理条形码类,一边多次利用

Ø  Decode :条形码反编码

Ø  Encode :编码成条形码

l  AbstractBarcodeImage

l  绘制条形码的抽象类。一般情况下,使用该类的虚方法就可以绘制出条形码图片。如果默认方法绘制的图片不能符合你的要求,请编写AbstractBarcodeImage的子类。该类抽象了以下接口:

Ø  Generate_Image :绘制条形码图片

Ø  GenerateImageWithLabel :返回带标签的条形码

Ø  Label_Generic :在条形码图片上绘制内容是原字符串的标签

 

看到这里,我相信你已经学会了,如何使用这个条形码类库了。但是这样可能仍旧满足不了你的好奇心,下面我以UPCA类为例讲解条形码编码的方法。

UPCA标准支持以下字符集:0,1,2,3,4,5,6,7,8,9,-,$,:,/,.,+,A,B,C,D,a,b,c,d 。其中英文字母不去分大小写,在本类库中,均被视为大写字母。另外UPCA条形码字串的开头和结尾必须是英文字母。

下面是编码对照表:

 

0

101010011

1

101011001

2

101001011

3

110010101

4

101101001

5

110101001

6

100101011

7

100101101

8

100110101

9

110100101

-

101001101

$

101100101

:

1101011011

/

1101101011

.

1101101101

+

101100110011

A(a)

1011001001

B(b)

1010010011

C(c)

1001001011

D(d)

1010011001

 

表 1

编码的时候,只需要把字符按照对照表作转换就可以了,然后还要在每个字符之间用一个数字 0 来连接。比如,A25D 编码后成了10110010010101001011011010100101010011001 。

怎么样,是不是很简单阿, 最后要说明的是,如何根据二进制条形码绘制图形。这个过程最容易理解,就一句话:遇到0的地方空白,遇到1时划线。 比如,上面的二进制条形码10110010010101001011011010100101010011001 别绘制成了:

 

 

OK, 关于条形码,说到这里。有兴趣的话,一起讨论哦。

posted @ 2016-01-11 12:30  快乐的老毛驴  阅读(730)  评论(0编辑  收藏  举报