使用.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, 关于条形码,说到这里。有兴趣的话,一起讨论哦。