数学建模社区-数学中国

标题: DIY系列之——某校图书证条形码制作 [打印本页]

作者: buguniaoo1991    时间: 2011-9-28 18:30
标题: DIY系列之——某校图书证条形码制作
DIY系列之——某校图书证条形码制作
/ o% h$ u0 E0 m' {3 W4 K4 t1 b" \( ]" \$ t
小谷同学 2011/9/25/ j5 X( b( B, @. h  [( L5 ?2 B5 |

( s* {# ?9 f+ A& E7 u1 M: Q摘要5 R% ^& n( ^( U5 H

8 b4 {/ {, y9 k! R" V关键词: 条形码
# q& f/ j4 e# Y( N5 p! D
! e, Z: v5 O, y! {- }* D由于印刷质量问题和长期的使用,某些同学的读书证可能会产生读卡不灵敏现象。为了便于解决这些问题,本文给出某校图书证上条形码的编码规则,并给出由这些规则生成条形码的过程。最后本文对条形码在日常应用中可能出现的问题进行了分析,并提出相应的解决方案。" Z9 J' h$ D( S
/ W/ X) ^" j# O" f4 P
目录
5 Y2 @# y% @" @) K% Z8 {
1 P- Z8 }  n2 }3 ]2 P/ u5 ~1.某校图书证编码规则
! E. J! v9 N; K4 }/ g' W- d% F- l( U/ o* [0 i! S& q
2.条形码制作的过程$ K' K/ v$ \4 w: T1 M6 f
4 {; P/ t/ O  C8 H  C1 A
3.打印与测试
) u; q/ X4 V4 v6 [& Q- U7 V9 X1 B( i4 `* Z. j! ^+ ?9 M5 p! X
4.扩展应用* x; S4 X, P0 a5 Q
  D; D1 Z# {$ V' o- P2 y4 G
5.关于本例的一些思考% n" z0 l3 b; h) j# A9 w
; D$ @! K" G) w+ q3 _4 d; U9 B9 b1 k
6.免责声明与使用注意事项
; s( g( |. s5 Y6 P2 e8 Y
8 T9 Y6 O4 f5 B' w0 O1 J$ f9 X7.参考文献
% ^, A( J( K8 D
0 i8 l; C+ [6 M+ b4 |+ a% ^8.附录
; O" s% B( n: n/ g8 v5 E& c* p
. Y  u* m  i, p$ G. o0 y$ f3 f+ R" p5 y& g

4 q# l) W7 ?4 t) i3 h' w# b
; L/ l$ F" Z6 h5 |* J) h  M& {+ [条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。有关条形码的更多资料参见文[1]。
5 f' `: L8 S) y/ M- m
  [' e2 d1 j) \在日常生活中,我们不可避免地要接触大量的条形码,其中最常见的就是图书证了。而某些同学的图书证经常丢失。此外,某些同学的图书证由于缺乏保护,会频繁出现录入不灵敏现象。于是在谴责图书证的印刷质量之余,动手DIY一张图书证,自己进行质量控制,则可以使其更加灵敏地识别,大大减少进入图书馆的时间,大大缩短借书时刷卡的时间,提高学习和工作效率。图书证中携带关键信息的就是条形码,于是DIY的重点也是如何得到对应的条形码。
3 a8 Q0 d6 o! j& ?$ y4 o; ?) P, I0 ^' E6 m
1.某校图书证编码规则: i8 w1 M6 ~8 z% R; ^. A$ C

0 r! e% B; x1 V5 z. s! ]由于所使用的编码方式不同,在了解常用编码规则(参见Internet)的基础上,必须通过对特定图书证的观察才可得出其特殊的编码规则。本文通过,对一种常见的图书证的观察,得出其编码规则如下:, c0 }. ^# a0 T: C

+ k9 ?& M2 j. A7 s①该条形码部分由两种不同宽度的黑白条组成,是一种类code39编码方式;我们假设宽条代表1,窄条代表0;并假设在最后多一个白色宽条,以便使黑白条码的个数相等,方便程序处理。" ]! O( w, R: k4 f. h3 }# I! \) N

8 N3 P4 I4 T3 H1 A" p! h/ G②图书证的白色条码都是一样的,分为以下三部分:
- }5 |8 D: \7 _* E; u) L
, L* L- k  A  r2 R1)起始部分:10001;2)数据部分:13个01001;3)终止部分:10001,与起始码一致。
) ?) r0 i* Y( Y3 `. r- x, @' c6 H& E! z
③图书证的黑色条码是携带学号信息的关键,分为以下三部分:
& S: f. p) y! G* m( Q9 e* v$ {/ Y% M6 h+ t* d3 H3 f( S; g1 w" X
1)起始部分:00110;
! _+ b7 |5 h8 Q
& w) D/ g  y  s- j2)中间部分:13个数字(即学号12位+图书证序号),每个数字对应的代码如表一所示; . p- n3 i' U0 l( T3 e: y8 f
- I0 m6 ]( W5 V+ R
表一 某校图书证号每个数字对应的代码" Z4 E$ c" W: g8 M7 s" h0 G
7 r4 {' |5 M9 r+ r, j
数字 代码 代码数字来源 数字 代码 代码数字来源 4 y; i' b6 r8 T9 w$ ^; Y0 r
1 10001  1:0001                     6 01100 6:0110
& b' Q3 D! f  B7 y2 01001 2:0010                     7 00011 8:1000 ; E9 Q% U0 b% ?+ L
3 11000 3:0011                     8 10010 9:1001 ' y' E7 z# N+ b( S
4 00101 4:0100                     9 01010 10:1010
$ |' f5 B4 |3 c- p" c- I5 10100 5:0101                     0 00110 12:1100                    6 |8 Q" x! W- \- V8 c- E( \# ^

; G( p  V# k! {3 w- |说明:每个数字由五个黑条组成,两宽三窄;代码前四位是数字的8421码的倒序,由于最多只能出现两个宽条,于是一次选取最多只出现两个1的8421码作为序号的代码;代码的最后一位用以校验,凑齐“两宽三窄”。
2 p4 J! i. E5 u# U& E- a* C
# B, ]( I: j5 S8 K) v5 s% f3)终止部分:00110,与起始部分以及数字0的代码都一致。
/ e6 \. M8 U2 Q5 q8 R- I% c. n  |( l$ Z* G& z. i) k8 y- t
2.条形码的制作过程5 w! I) d$ o5 w0 |' v5 m( V8 d
" y1 X; V  P5 T. Z  s
黑色和白色可以用二值图像来表示,于是我们的关键是如何得到与条形码对应的二维矩阵。/ Q- U  c* ~* u/ c: D" C& I

1 ~/ c+ H) W* v0 }定义窄条即代码0的像素宽度为w,宽条即代码1的像素宽度为2w(一般取w=1即可);定义二维矩阵在黑色像素点处值是0,在白色像素点处值是1。此立即上得出与学号对应的条形码的二值图像的矩阵。! n8 i: u: m. |* t& ~+ g3 j3 W: E

7 d$ v2 e7 i2 ?) ^! J8 O: N条形码效果如图所示(程序代码见附件所示)。3 [9 @8 s! ]1 F; y) @' o, q
1.png
& g& a& P% q- ?* d! B% }) X8 ^图一 所得条形码效果图8 ~7 |  N+ a+ K
" S# \- A/ ?" `% H8 @$ m
3.打印与测试, E& K- M" @1 j' t: a( S1 k
7 e& S/ e5 Q* \* j, D2 D* X
有的制造商在批量打印图书证时不太用心,加上可能设备老旧,所以难免会使某些同学的图书证出现杂纹等印刷质量问题。
) X* C% d' ~# f4 t* G2 y- M& g' u: ~. q5 G$ b7 J2 u9 U  ~" f- Y$ l
因此,在DIY的过程中,尽量采用分辨率较高的打印机。对于分辨率较低的打印机,通过修改程序,扩大条形码的宽度,也可打印出质量上乘的条形码(本文测试时采用HP Color LaserJet 2820彩色激光一体机)。; @+ y2 Z: w; Q5 o; J% J

( s& i* A# n' J8 E" l. ?为了方便进行测试,本文打印出不同大小的条形码。
( ]8 F. B0 m4 l" ^/ V; z( A2 x2 e' _* Z1 ]& Y8 L
测试一:将其用透明胶带粘在硬纸板上。, W) K/ o& F1 V8 a' k

: f9 b2 [0 |. r6 n% ~结果令人遗憾,读卡机根本不识别。通过与图书证比较发现:  T3 ?& S( s! d5 K4 j
2 A; Z) o# a& v/ X9 l( N5 k! D
图书证正面的塑胶反射能力很弱,在灯光下几乎看不到灯在其上的虚像;而透明胶带的反射能力很强,可以地清楚灯地虚像。  A! R, W- _; q: P2 y% ]
5 e1 E5 u; \2 M4 i
测试二:找到原因后进行,将与原图书证同样的大小的条形码用胶水贴在硬纸片上,结果顺利该校图书馆通过门禁。We are in now!!
* \+ j0 m: [/ ~6 k9 [( ?- X* W: z2 s. N! e- z0 x' t* |! ^
效果如图二所示。
( I( f8 R( c% M 2.png
3 W! D4 l! Q) I( `图二 打印效果图* p' Y* |4 p* R* e# M; i) V- J) y
测试三:用打印出的不同大小的条形码逐一进行测试,只有在一定的大小范围才可以通过测试。这说明了,条形码扫描器(注:本文使用的是全角度扫描器,其通过光学系统产生多条扫描线)是有一定的大小识别范围的。
! K; T: t9 ^( u! ]& ]* L, R% u" `$ J$ @( j8 A: M2 q; M
4.扩展应用" [  Z4 e- F2 q% t$ e* p7 o* S  B' C
4 V3 c$ J- j( F, |6 \+ c* o) g! j- A
为了达到逼真的效果,我们做出了图书证模板(MATLAB版),该模板根据用户提供的证号、系部和姓名、照片、字体等信息,自动生成可供彩色打印的图书证如图三。0 k2 z. O/ t- s( \" {# z% T
3.png 4 f' ]2 t* E/ a% c) w
图三 可供彩色打印的图书证
: Q& H2 S. Z/ Y; y
( m8 F: Y% e# {0 O过后,我们会给出相应的网页版、C++版、VB版等等。
! j* Y# X2 P3 i0 j3 A. ]- {
7 s3 G" O3 S& ^" C0 d) z5.关于本例的一些思考1 p3 @8 L  x) I# b' Y
( _" _. r6 t( C8 x3 {- n
由相关文献,可知条码技术具有以下优点:; i3 b' Y8 C& o( `- e/ O

- q& P" z2 ~+ m0 m  1)、输入速度快;
3 B7 K( q7 y0 Y/ {
& w( b8 W: Q( t. \& _) k1 V  2)、可靠性高;
# }/ e, M# T/ d
# L  \: Y2 r( `7 R' H" j9 A  3)、采集信息量大;
  ~2 v+ b: a  r7 G! R
% u) m% i1 m. k+ r  4)、灵活实用;5 q! x( ^! _% j6 m* G5 z0 W; x

1 `& g: e* |' q4 C$ \+ Q, p5)、条码标签易于制作
% i4 l1 `1 k) ?! r( y+ A& Z) A2 `" A. e
6)、识别设备操作容易,不需要特殊培训;( p2 C! B0 i3 f! B8 x  G% j' F/ M

) U& g. C2 u9 @4 n* p' h6 [2 N% @7)、设备也相对便宜。: z0 b" J1 @! G, C  G; i' \+ C

. m" U1 L" K6 i因此,在平时可以自己构造的加密的编码规则,利用现成的条形码扫描器,可以很快实现特定功能的组建嵌入式的或基于PC的条形码识别系统。# p# L$ Q$ E" F- J1 C* M8 ~4 _; `. j

( b+ \7 }; s' u" n由本文看,尽管一维条形码在各个领域获得了广泛的应用,但其安全性值得商榷。于是,在安全性要求较高或者要求条形码携带更多信息的领域,人们普遍采用二维码。常见的二维码如图四所示(更多资料参照文[2])。; k/ Q2 u  k9 ?" P
4.png ; A+ n! C3 C! B
图四:常见的二维码
0 @. F6 J+ |2 ]$ t0 c# @
- K8 `  t5 V8 g5 W4 E" ^/ e6.免责声明与注意事项- B! E& X+ O% H- P8 `) }
+ N& q9 n0 y. ]$ A" B
版权所有,翻版必究。+ N# d; Q4 S% N- a$ [' S
( f+ `% |8 ?5 ~8 I
技术在于交流。本文旨在交流条形码制作技术,并为个人制作提供质量较为上乘的图书证的方法,非经相关方面授权,严禁用于商业用途。有不法分子由此牟利而产生的法律责任,与本人无关。
0 K+ {& S7 F" K: ~/ I# v# F. s2 `/ b1 w) \) W4 K! a! H& y
任何单位或个人认为本文可能涉嫌侵犯其合法权益,应向本文作者提出书面权利通知,并提供身份证明、权属证明及详细侵权情况证明。作者在收到相关法律文件后,将会依法尽快删除本文中违反法律的内容。
! x; }: n0 A5 S& K
: N4 j' }, _' m9 [2 r7., x3 f  K  n, |9 G1 N
参考文献
0 ?! N; [- i" y  G# B) U4 y
7 j! e9 M/ M, s+ a2 y, h[1]条形码—百度百科http://baike.baidu.com/view/13740.htm[2010-09-25]
  s- T! G/ s, I* p7 g3 z  G2 a
/ t, G3 `9 n+ w+ k[2]二维码—百度百科http://baike.baidu.com/view/132241.htm[2010-09-25]+ }/ {, Y& h; c( V8 T" J
  N3 {6 K. u. }/ a" c3 w
8.1 u- \( l1 Z. [# @6 F# n
附录9 D( y! p3 H2 K
0 K8 G& p  L- s" U5 g' g
相应的MATLAB程序代码如下(该程序经过简单修改,可以写成函数的形式,更方便地进行各种编码规则的条形码的生成):
' q6 l/ U" d' E" ~2 G9 V
6 A( u5 L8 N3 e%barcode.m
2 E& o+ @7 Y+ [3 U; ]5 v; ^' b' d- M
%生成学号a对应的条形码1 S3 [% b! c& h
+ c! d2 P3 X3 u% s) |
%2011/09/25 13:24 BY小谷同学
7 f9 P0 j9 m9 |: ~1 E0 k3 Q: |, S  F, ]) H- H0 o! q
a='1234567890123';%学号,自行更改* U3 P. a1 ~2 n

9 a: A2 s$ d" i% {9 H% JBlack_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 \3 v; T; |/ B/ p, d
+ P$ `$ D$ p2 L* ?' e% z3 c0,1,1,0,0;0,0,0,1,1;1,0,0,1,0;0,1,0,1,0;0,0,1,1,0];%数字编码2 D+ Y% x3 |' d9 n1 R+ {, o
7 E% h6 W1 Y; T5 ~  U
White_num=[0,1,0,0,1];%插入符的编码7 L9 x! L4 R0 B' |5 @7 w% \2 s

) O" A7 Q) N# P! T" ~5 c& x8 A%Black_SE='00110';3 P7 |0 V+ H4 e0 D( v5 ^
1 }8 g% w" t4 k
%White_SE='10001';White_M='01001';
" @6 }% M" b# U& m1 t  ?. @
' Z3 o5 L2 c6 M( |barheight=30;%定义条形码的高度) |, P: L: g/ q. _: M9 f

# T2 F9 ~- u( B# A9 \- @barwidth=1;%定义条形码的像素宽度1 V/ @. Y$ i0 H/ s8 b3 f
& l3 }' F7 K3 e. ?9 g" j

+ L! u5 @( l- z) [1 z  a%可以对特定长度的输入进行控制,本文规定长度为13* {/ v, a$ o. }, I% L

2 x+ _: n1 P' g% l8 w: [if length(a)~=13- ?# N7 {7 D' Z4 a' n! c7 ^
# j. C! I  [" ^0 A) q" J
. Q# v- ?0 S! A: w) b4 t
error('图书证必须有13个数字');: l% x5 Y, d. J, f5 x+ e" {

/ f' b0 p9 }+ U4 u2 {, l& ?1 O0 aend" j( S5 l7 z/ H1 n' e: j2 x+ t
+ }* f- c: N8 _! ?) B

5 [1 G( K" I1 ~* mbarcode_SE=[0,1,1,0,1,0,0,1,0,0,1,0,1,1];
/ a1 ?& P0 }7 g5 f& q: z7 g5 @- I; L+ z- u7 T8 q
%为方便,直接人工得出起始与终止部分的条形码/ N* S3 F8 [0 q6 Z8 f
. J# g0 F8 I) c
%也可以由程序生成.- A- e1 e! y- P
2 D/ k8 w8 ]! k& M; n- B( s0 d
total=length(a)*(7+7);
6 ~6 k$ W' |5 l: s! c' W
. t% J3 o. f$ W0 B' ^%条形码的总像素宽6 o2 z) H0 V$ M+ R# Y

" g( B2 g1 B) o  s%也可以不用求,因MATLAB提供的均是动态数组
+ F- Y8 e2 G$ K0 o! i8 G" C0 W
0 h3 e+ X8 c! Es=1;%计数,记录
5 S& B2 {: B6 `7 A2 i7 N& Q1 _  H" U
. H1 L# r! u/ L, U, W8 M! `* b% V& ?4 K# s
%由于利用for语句容易出现不可预料的错误
- d: i' j$ G8 @/ r, W
4 M  t( j/ t: C6 u2 E%大部分是数组的行标与列标的调用问题,于是采用while循环4 H3 f! a+ r1 r; C$ I
2 p" P2 R- _2 s1 K5 \
%嵌套循环,得出数据部分
& N: i3 {: X+ @5 o1 k* i
( U" V8 P4 l0 s0 W9 [" E. hm=1;- g* h( F: v+ M' b
, P6 W& O5 t( J/ z  b
while m<14 3 e& t0 d( \$ s# k' ~$ H$ g7 t, A8 e3 n
/ L3 _4 V, U" j1 Y

1 ]& C+ w6 U5 |3 Z! _if a(m)=='0';
; a4 N; g8 N- v# Y1 z1 V) H# N" p5 y
# i* ?1 V$ H$ ^3 L% u" h
t=10;
* B; o4 C* U) [% {$ y5 y. s" Y
6 L' N  g+ `; x% r( y- p
& O$ x4 T) F* p. J6 _9 Y%若为数字零,应该调用的下标是10
, ^6 y: t- k$ Q2 x4 c# H( d+ W$ x
+ \' J5 O' Y4 \
! P8 B! l! v2 X( Belse
. ?) E2 ^2 {( M+ j
7 {: a3 `& U2 V5 `9 }: m4 L0 d
$ z1 L9 Q: w% qt=double(a(m)-48);  X5 P5 U/ p3 ~* {# j$ j

' i* P, j+ K) l* U! _: B* G  B%由于输入是ascii字符,转换为整数需要减去30H,即488 E8 O5 P, D; r- c

1 S2 w, }2 t& V9 O
0 Y3 B! U5 K8 Nend0 ]# A+ l) u& U! M, a) K
3 ?  x' I$ G5 x' P

$ n$ q- m- W  G7 Kn=1;%同样的while循环: i% C; I$ s0 g" {. q1 f3 k
: z/ d  u# J2 ]  b) U1 z

: ?' w& S5 n: Uwhile n<6
  e: V' u3 R; `2 s! s) t: N& o& |
- y1 n8 g) p, a2 _. Z& k% l" b" J
if Black_num(t,n)==0* Y6 c1 k+ ^2 `. |

' e+ ?( T1 [/ n1 u" F
: V% e) ?% `2 vbarcode_M(s)=0;
. l+ Y; m, I$ ]6 c; q7 s: v
. Z/ Y: U% U' F$ D" g' i0 q. b# n) b' F0 A
s=s+1;
: F- |  ^. P3 H  X* o9 D4 G8 S+ G% c4 v4 {7 f* w  O) r
9 K$ }: R1 P6 ?3 ^
else
0 j' i) ]# F6 g! ~& Y! f* j
6 K+ A6 h5 Q( s; N; O9 k3 L( v: b
2 j4 w# ~+ I3 r5 Vbarcode_M([s,s+1])=[0,0];
- [1 Z2 n- q3 B( `% y% h: T+ k$ z% q5 U
; U+ }8 h  {3 Y. D3 Y: R3 z
s=s+2;& y+ l$ q5 P3 ^' D# r9 E

4 b7 V: w# U) \8 Q) A
% F& H1 R% {) O! w4 T' Send0 Z+ b% e. A7 |* Q2 G* P
8 g' `4 U7 R  M, c' A! q! O

. F$ F  }* }2 rif White_num(n)==0
0 M9 c8 v$ b% e) T' }$ W/ o0 p, D: Y
6 J' g( z3 B2 L6 {1 a
barcode_M(s)=1;
' a$ B  p) @' {7 a6 O3 a* y- P: {7 F" r
) H# ~3 p/ A/ m  I+ s
s=s+1;
# p! l) g& y: M' ]- ~* H5 _- f; u7 n% a

1 P; A# k: P: L5 R( T" a( J2 yelse
- Q& A$ W2 ]& y
& z- v$ t. _& D, u) n1 q
9 u/ a* ^1 u" {! e4 N, \3 }barcode_M([s,s+1])=[1,1];
# z2 O. ]( z8 G- ~% q3 O& r" u" Q% @! e9 c& f

1 J7 s, {4 r5 w" n, Ys=s+2;0 [# d+ ~: w1 J/ t$ X( u) {

6 h/ I7 G% ^/ e$ h
. U( d3 T: Q8 S7 f- M; [0 eend
5 r/ u' e% ~; i) z& H/ T5 X+ x
( m3 s! U0 r/ W. h. I$ ?, A5 H- T
3 S/ ?$ W, r) y+ V4 N( k4 [n=n+1;
* q3 O$ {$ a5 _% a# {/ c) s( X/ b7 u: g. R3 M, |, g

% B9 a! L. U6 o/ B- n! Qend
* J- P) y& S5 D+ ?* s% ~
: J. e0 T. b& s( y( p* Ym=m+1;
- f% u5 S, D1 `) k2 Q5 w: L
  U/ @% U9 ?8 r6 r- h, W6 w6 cend
1 @2 B- @; ?; b8 ]. E4 ~: s4 R- R( w4 N5 w  k8 i9 K8 G
: W9 r' l7 E$ F8 I2 W
bcode=ones(barheight,1)*[barcode_SE,barcode_M,barcode_SE];
, u+ E; o2 N7 t$ |9 ~. F
: h: P- t8 U8 q%将一位矩阵拉宽,生成给定高度的条形码对应的二值图像的矩阵- E. N) C9 `6 L
# `+ n! i: Q6 K) D( s# c6 P& P
bcode=bcode==1;%将数组转换为逻辑数组(Logic Array)
* s8 \  `4 S' A) q5 L6 x, L- v" Y" D5 j- d( k
imshow(bcode)%显示所得到得条形码
. D. w( {/ \' J" P, t8 S0 J0 Q# q3 ^6 x  h/ r* Z, Y
%然后可以自行存贮得到的条形码3 ?- |1 @5 f! Z/ @& ^" l0 E. m
" A5 B% b: V; F# I$ Z! B9 P" {1 V1 U
%然后用PS等工具得出具有自己特色图书证啦
; O* q4 K4 m9 Z. \( ]. }* H# |- R2 [# S# M2 P/ v# f& a/ u) i
4 c  [+ F) R' u# f

作者: 孤独的修行者    时间: 2011-9-29 15:16
够强大!!!
作者: lszf    时间: 2011-9-29 20:04
强啊
作者: freedomfox    时间: 2011-9-29 20:36
很强大啊,
* c; m% R' N8 K# h可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?
作者: buguniaoo1991    时间: 2011-9-29 23:50
freedomfox 发表于 2011-9-29 20:36 5 x; U0 N7 I6 g! r0 H
很强大啊,
* M$ @/ v7 `0 z, L) a7 }可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?{:3_ ...

. _2 {* z& ]& f# \2 X' ?5 R8 e可以,不过你的学校肯定有记录,一旦发现,后果很严重的;
7 `2 Z1 O, ~4 G" Y5 G目前我想到是:
8 X% b9 w6 J! H, w/ x3 `; a% y一、去周围学校的图书馆。
8 p4 r0 `0 e3 m6 L9 D0 j: s二、自己丢的图书证自己做一个一模一样的来。
( I9 }3 U4 q/ S" a6 t三、将图片弄到手机上,然后用手机刷进图书馆,吸引眼球
+ M+ V3 B7 ?! R7 `四、将来毕业再回学校,再做一个图书证进图书馆8 p: K$ l9 O9 f/ z% `* {: x, `4 }

作者: 书呆子    时间: 2011-10-2 22:53
呵呵呵
. X- ^& X: G$ A; ^! i! B6 Y, u  t1 H( }。。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5