buguniaoo1991 发表于 2011-9-28 18:30

DIY系列之——某校图书证条形码制作

DIY系列之——某校图书证条形码制作

小谷同学 2011/9/25

摘要

关键词: 条形码

由于印刷质量问题和长期的使用,某些同学的读书证可能会产生读卡不灵敏现象。为了便于解决这些问题,本文给出某校图书证上条形码的编码规则,并给出由这些规则生成条形码的过程。最后本文对条形码在日常应用中可能出现的问题进行了分析,并提出相应的解决方案。

目录

1.某校图书证编码规则

2.条形码制作的过程

3.打印与测试

4.扩展应用

5.关于本例的一些思考

6.免责声明与使用注意事项

7.参考文献

8.附录




条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。有关条形码的更多资料参见文。

在日常生活中,我们不可避免地要接触大量的条形码,其中最常见的就是图书证了。而某些同学的图书证经常丢失。此外,某些同学的图书证由于缺乏保护,会频繁出现录入不灵敏现象。于是在谴责图书证的印刷质量之余,动手DIY一张图书证,自己进行质量控制,则可以使其更加灵敏地识别,大大减少进入图书馆的时间,大大缩短借书时刷卡的时间,提高学习和工作效率。图书证中携带关键信息的就是条形码,于是DIY的重点也是如何得到对应的条形码。

1.某校图书证编码规则

由于所使用的编码方式不同,在了解常用编码规则(参见Internet)的基础上,必须通过对特定图书证的观察才可得出其特殊的编码规则。本文通过,对一种常见的图书证的观察,得出其编码规则如下:

①该条形码部分由两种不同宽度的黑白条组成,是一种类code39编码方式;我们假设宽条代表1,窄条代表0;并假设在最后多一个白色宽条,以便使黑白条码的个数相等,方便程序处理。

②图书证的白色条码都是一样的,分为以下三部分:

1)起始部分:10001;2)数据部分:13个01001;3)终止部分:10001,与起始码一致。

③图书证的黑色条码是携带学号信息的关键,分为以下三部分:

1)起始部分:00110;

2)中间部分:13个数字(即学号12位+图书证序号),每个数字对应的代码如表一所示;

表一 某校图书证号每个数字对应的代码

数字 代码 代码数字来源 数字 代码 代码数字来源
1 10001  1:0001                     6 01100 6:0110
2 01001 2:0010                     7 00011 8:1000
3 11000 3:0011                     8 10010 9:1001
4 00101 4:0100                     9 01010 10:1010
5 10100 5:0101                     0 00110 12:1100                    

说明:每个数字由五个黑条组成,两宽三窄;代码前四位是数字的8421码的倒序,由于最多只能出现两个宽条,于是一次选取最多只出现两个1的8421码作为序号的代码;代码的最后一位用以校验,凑齐“两宽三窄”。

3)终止部分:00110,与起始部分以及数字0的代码都一致。

2.条形码的制作过程

黑色和白色可以用二值图像来表示,于是我们的关键是如何得到与条形码对应的二维矩阵。

定义窄条即代码0的像素宽度为w,宽条即代码1的像素宽度为2w(一般取w=1即可);定义二维矩阵在黑色像素点处值是0,在白色像素点处值是1。此立即上得出与学号对应的条形码的二值图像的矩阵。

条形码效果如图所示(程序代码见附件所示)。

图一 所得条形码效果图

3.打印与测试

有的制造商在批量打印图书证时不太用心,加上可能设备老旧,所以难免会使某些同学的图书证出现杂纹等印刷质量问题。

因此,在DIY的过程中,尽量采用分辨率较高的打印机。对于分辨率较低的打印机,通过修改程序,扩大条形码的宽度,也可打印出质量上乘的条形码(本文测试时采用HP Color LaserJet 2820彩色激光一体机)。

为了方便进行测试,本文打印出不同大小的条形码。

测试一:将其用透明胶带粘在硬纸板上。

结果令人遗憾,读卡机根本不识别。通过与图书证比较发现:

图书证正面的塑胶反射能力很弱,在灯光下几乎看不到灯在其上的虚像;而透明胶带的反射能力很强,可以地清楚灯地虚像。

测试二:找到原因后进行,将与原图书证同样的大小的条形码用胶水贴在硬纸片上,结果顺利该校图书馆通过门禁。We are in now!!

效果如图二所示。

图二 打印效果图
测试三:用打印出的不同大小的条形码逐一进行测试,只有在一定的大小范围才可以通过测试。这说明了,条形码扫描器(注:本文使用的是全角度扫描器,其通过光学系统产生多条扫描线)是有一定的大小识别范围的。

4.扩展应用

为了达到逼真的效果,我们做出了图书证模板(MATLAB版),该模板根据用户提供的证号、系部和姓名、照片、字体等信息,自动生成可供彩色打印的图书证如图三。

图三 可供彩色打印的图书证

过后,我们会给出相应的网页版、C++版、VB版等等。

5.关于本例的一些思考

由相关文献,可知条码技术具有以下优点:

  1)、输入速度快;

  2)、可靠性高;

  3)、采集信息量大;

  4)、灵活实用;

5)、条码标签易于制作

6)、识别设备操作容易,不需要特殊培训;

7)、设备也相对便宜。

因此,在平时可以自己构造的加密的编码规则,利用现成的条形码扫描器,可以很快实现特定功能的组建嵌入式的或基于PC的条形码识别系统。

由本文看,尽管一维条形码在各个领域获得了广泛的应用,但其安全性值得商榷。于是,在安全性要求较高或者要求条形码携带更多信息的领域,人们普遍采用二维码。常见的二维码如图四所示(更多资料参照文)。

图四:常见的二维码

6.免责声明与注意事项

版权所有,翻版必究。

技术在于交流。本文旨在交流条形码制作技术,并为个人制作提供质量较为上乘的图书证的方法,非经相关方面授权,严禁用于商业用途。有不法分子由此牟利而产生的法律责任,与本人无关。

任何单位或个人认为本文可能涉嫌侵犯其合法权益,应向本文作者提出书面权利通知,并提供身份证明、权属证明及详细侵权情况证明。作者在收到相关法律文件后,将会依法尽快删除本文中违反法律的内容。

7.
参考文献

条形码—百度百科http://baike.baidu.com/view/13740.htm

二维码—百度百科http://baike.baidu.com/view/132241.htm

8.
附录

相应的MATLAB程序代码如下(该程序经过简单修改,可以写成函数的形式,更方便地进行各种编码规则的条形码的生成):

%barcode.m

%生成学号a对应的条形码

%2011/09/25 13:24 BY小谷同学

a='1234567890123';%学号,自行更改

Black_num=[1,0,0,0,1;0,1,0,0,1;1,1,0,0,0;0,0,1,0,1;1,0,1,0,0;

0,1,1,0,0;0,0,0,1,1;1,0,0,1,0;0,1,0,1,0;0,0,1,1,0];%数字编码

White_num=;%插入符的编码

%Black_SE='00110';

%White_SE='10001';White_M='01001';

barheight=30;%定义条形码的高度

barwidth=1;%定义条形码的像素宽度


%可以对特定长度的输入进行控制,本文规定长度为13

if length(a)~=13


error('图书证必须有13个数字');

end


barcode_SE=;

%为方便,直接人工得出起始与终止部分的条形码

%也可以由程序生成.

total=length(a)*(7+7);

%条形码的总像素宽

%也可以不用求,因MATLAB提供的均是动态数组

s=1;%计数,记录


%由于利用for语句容易出现不可预料的错误

%大部分是数组的行标与列标的调用问题,于是采用while循环

%嵌套循环,得出数据部分

m=1;

while m<14


if a(m)=='0';


t=10;


%若为数字零,应该调用的下标是10


else


t=double(a(m)-48);

%由于输入是ascii字符,转换为整数需要减去30H,即48


end


n=1;%同样的while循环


while n<6


if Black_num(t,n)==0


barcode_M(s)=0;


s=s+1;


else


barcode_M()=;


s=s+2;


end


if White_num(n)==0


barcode_M(s)=1;


s=s+1;


else


barcode_M()=;


s=s+2;


end


n=n+1;


end

m=m+1;

end


bcode=ones(barheight,1)*;

%将一位矩阵拉宽,生成给定高度的条形码对应的二值图像的矩阵

bcode=bcode==1;%将数组转换为逻辑数组(Logic Array)

imshow(bcode)%显示所得到得条形码

%然后可以自行存贮得到的条形码

%然后用PS等工具得出具有自己特色图书证啦


孤独的修行者 发表于 2011-9-29 15:16

够强大!!!

lszf 发表于 2011-9-29 20:04

强啊{:soso_e179:}

freedomfox 发表于 2011-9-29 20:36

很强大啊,
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?{:3_60:}

buguniaoo1991 发表于 2011-9-29 23:50

freedomfox 发表于 2011-9-29 20:36 static/image/common/back.gif
很强大啊,
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?{:3_ ...

可以,不过你的学校肯定有记录,一旦发现,后果很严重的;
目前我想到是:
一、去周围学校的图书馆。
二、自己丢的图书证自己做一个一模一样的来。
三、将图片弄到手机上,然后用手机刷进图书馆,吸引眼球{:3_52:}
四、将来毕业再回学校,再做一个图书证进图书馆

书呆子 发表于 2011-10-2 22:53

呵呵呵
。。
页: [1]
查看完整版本: DIY系列之——某校图书证条形码制作