数学建模社区-数学中国

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

作者: buguniaoo1991    时间: 2011-9-28 18:30
标题: DIY系列之——某校图书证条形码制作
DIY系列之——某校图书证条形码制作- p1 S. W8 Z: O5 V: l! O( d

: `: v. o2 `& x' s$ @% M. a小谷同学 2011/9/25
5 D8 n9 u! h* {6 E' s1 R1 Y! {2 s5 y5 d
摘要* \9 S3 k2 O9 R
* D/ W2 {5 H, X7 q
关键词: 条形码
* Y  t* g( y! d% P
- R) E( k: Q% @  j5 Q4 {, L由于印刷质量问题和长期的使用,某些同学的读书证可能会产生读卡不灵敏现象。为了便于解决这些问题,本文给出某校图书证上条形码的编码规则,并给出由这些规则生成条形码的过程。最后本文对条形码在日常应用中可能出现的问题进行了分析,并提出相应的解决方案。
* K9 {2 T4 \- {# a
/ {) Q6 c. I: Q, J  f& i目录+ X9 P, b  Y/ @5 O
* I) N3 y7 L: S) S; a# r& G" y
1.某校图书证编码规则
  \6 l* R' ?- D# x6 G  O6 W
0 O2 ~& @7 O  R) A0 c2.条形码制作的过程
! u* V- L% R+ n/ g7 U( A% E+ e# G9 [5 b2 D) ~
3.打印与测试: [7 w9 D+ t6 T- o

/ i; D5 T4 y' W9 `4.扩展应用
& V; q7 E5 @0 }& l; }- S" e, i5 N  Q9 d5 O$ H7 s8 \# a
5.关于本例的一些思考
+ R# F4 }  O8 {- V7 A' n% X: ]2 A: k0 ^2 }5 y& k& @
6.免责声明与使用注意事项6 L6 A7 ~) y8 Y$ V
" W' g9 C9 F* r  ]% t) c4 }$ E1 i
7.参考文献
; W) D( v6 [7 e  k* x6 J/ c6 A6 m
7 n1 [; [5 R" M" r8 i+ B; y8 P8.附录! C1 d: x% ?# K0 `) n
' \9 g" r# a$ B2 Z

" }0 h* U, c3 b& L  `, C4 r: L1 q' }% @+ g% W' t
& T& e2 q& @7 a" z; }2 w
条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。有关条形码的更多资料参见文[1]。* |. @: i$ s9 r# b; s4 J

: p: j1 H; d/ X1 A) X& o在日常生活中,我们不可避免地要接触大量的条形码,其中最常见的就是图书证了。而某些同学的图书证经常丢失。此外,某些同学的图书证由于缺乏保护,会频繁出现录入不灵敏现象。于是在谴责图书证的印刷质量之余,动手DIY一张图书证,自己进行质量控制,则可以使其更加灵敏地识别,大大减少进入图书馆的时间,大大缩短借书时刷卡的时间,提高学习和工作效率。图书证中携带关键信息的就是条形码,于是DIY的重点也是如何得到对应的条形码。4 ?3 N- t% S  h3 C2 z0 r* B
6 \  p& W, g- z$ R1 X
1.某校图书证编码规则
& e0 y" ]/ |6 F7 B7 W; L; l  ^* f. P- T3 x) ^7 [* k
由于所使用的编码方式不同,在了解常用编码规则(参见Internet)的基础上,必须通过对特定图书证的观察才可得出其特殊的编码规则。本文通过,对一种常见的图书证的观察,得出其编码规则如下:* u" I* q( N3 k9 C! I# {
; c- D. {7 A. G' f( R+ K
①该条形码部分由两种不同宽度的黑白条组成,是一种类code39编码方式;我们假设宽条代表1,窄条代表0;并假设在最后多一个白色宽条,以便使黑白条码的个数相等,方便程序处理。1 o! s% }: l8 p9 J8 L

( D- Q% q' [" c# c5 B4 C②图书证的白色条码都是一样的,分为以下三部分:% A) ^# z$ E0 e3 j4 |
; d" ]# j: D- l  y9 c
1)起始部分:10001;2)数据部分:13个01001;3)终止部分:10001,与起始码一致。5 x& M* c  m% v4 u% n
/ p5 A) @9 |2 T& x5 h# n' ]  t
③图书证的黑色条码是携带学号信息的关键,分为以下三部分:' W0 S2 S/ a- c- k  I5 l9 a% @+ i
2 Y1 n4 `$ _+ h; Y( J; r/ x" @; C
1)起始部分:00110;
0 R: m6 t0 e2 w2 W. R
! ?; s8 U7 W' _9 h$ K9 U2)中间部分:13个数字(即学号12位+图书证序号),每个数字对应的代码如表一所示;
$ i& N' Y9 j5 j2 B) K  P
1 n* B& |* v6 d% U表一 某校图书证号每个数字对应的代码
- I0 P& z( e6 v; e9 d% o+ v& k% ]/ T6 p
数字 代码 代码数字来源 数字 代码 代码数字来源
+ L7 L* X; b, Y0 c, ]1 Y" {1 10001  1:0001                     6 01100 6:0110
& P, E( I' f2 J' C/ ^: y( e( E2 01001 2:0010                     7 00011 8:1000 - W* g  N( k+ M" |6 [
3 11000 3:0011                     8 10010 9:1001
( n* C' I1 ?1 O& o+ a3 e4 00101 4:0100                     9 01010 10:1010
" \3 e  k! g2 t1 e7 S7 t0 P5 10100 5:0101                     0 00110 12:1100                    
& g6 z2 S5 l6 A4 H6 a  \
" _3 c2 o$ w8 E) d2 \4 Q说明:每个数字由五个黑条组成,两宽三窄;代码前四位是数字的8421码的倒序,由于最多只能出现两个宽条,于是一次选取最多只出现两个1的8421码作为序号的代码;代码的最后一位用以校验,凑齐“两宽三窄”。
& G# m& z7 E0 N$ I4 C1 P5 z& Y
2 H9 g+ l- N  S& [" z8 R$ M3)终止部分:00110,与起始部分以及数字0的代码都一致。* B/ k2 |1 C. z  a$ `  M" y0 u/ l

/ S9 T$ Q* X6 M" V2.条形码的制作过程: ^- v! P  F* j( p! O9 d
  d- x9 i: w" V0 {6 c+ Y, a! H
黑色和白色可以用二值图像来表示,于是我们的关键是如何得到与条形码对应的二维矩阵。
# E! ~2 ]% g8 |/ b9 W
0 S2 p# o& l8 H9 U) c定义窄条即代码0的像素宽度为w,宽条即代码1的像素宽度为2w(一般取w=1即可);定义二维矩阵在黑色像素点处值是0,在白色像素点处值是1。此立即上得出与学号对应的条形码的二值图像的矩阵。! o8 N( h) P. @4 w) V. E
& G4 a& t* b; n2 C8 L" L
条形码效果如图所示(程序代码见附件所示)。
+ `* z# t) j: m( z; Z. w" q 1.png ; n+ c  a, z) I5 h/ D& H# _
图一 所得条形码效果图
) H7 j4 w+ F! U+ Y
% ]0 ?% z0 s. m. Z3.打印与测试: S' D  N/ {$ E5 b; ]8 S# V0 `& K
# D, m8 V6 y8 {# m
有的制造商在批量打印图书证时不太用心,加上可能设备老旧,所以难免会使某些同学的图书证出现杂纹等印刷质量问题。
4 G" }+ c3 i: Y8 u) x
: C6 C; n0 r, d! c/ I. V8 i7 k因此,在DIY的过程中,尽量采用分辨率较高的打印机。对于分辨率较低的打印机,通过修改程序,扩大条形码的宽度,也可打印出质量上乘的条形码(本文测试时采用HP Color LaserJet 2820彩色激光一体机)。
2 \: [+ I; T$ f) D5 Z
; Z, V$ o( i, T5 z/ |: r为了方便进行测试,本文打印出不同大小的条形码。
) {; [5 }2 n! k7 y" R, U: e+ ]2 o+ X% N' `) B- a7 N
测试一:将其用透明胶带粘在硬纸板上。
8 U; J2 f' |' P( Y* t- V  R3 w6 A* l% N
结果令人遗憾,读卡机根本不识别。通过与图书证比较发现:+ k5 J9 v# V' ]" m. V3 }

) }/ }, O7 K+ U( }图书证正面的塑胶反射能力很弱,在灯光下几乎看不到灯在其上的虚像;而透明胶带的反射能力很强,可以地清楚灯地虚像。- P8 d4 S: \, g) b5 {
, @& q. [6 A$ A% j
测试二:找到原因后进行,将与原图书证同样的大小的条形码用胶水贴在硬纸片上,结果顺利该校图书馆通过门禁。We are in now!!4 o- w) c2 [4 \" \8 J/ O6 ~

+ v: }; P  t( j: j效果如图二所示。
, \& [. E7 s. U: q/ f 2.png
  @: U: \1 E. Y4 k! @9 \图二 打印效果图
- ]4 w. ~! x, I" c8 A2 L) H+ c测试三:用打印出的不同大小的条形码逐一进行测试,只有在一定的大小范围才可以通过测试。这说明了,条形码扫描器(注:本文使用的是全角度扫描器,其通过光学系统产生多条扫描线)是有一定的大小识别范围的。5 r1 X  L) r3 {. ?7 V. G  D
( ~: e0 O8 N6 d. ]" z
4.扩展应用
( g8 g, b3 B- w' Q4 M% n
5 D( o- U4 V5 L- Q* l/ U$ m/ g为了达到逼真的效果,我们做出了图书证模板(MATLAB版),该模板根据用户提供的证号、系部和姓名、照片、字体等信息,自动生成可供彩色打印的图书证如图三。3 Z  i( T( i5 N) t+ s# S7 C
3.png " P% N* S; k" ]0 V
图三 可供彩色打印的图书证% @$ l' x" U. Q9 d# k  K6 {9 \- I

1 P5 |2 i# o3 E1 g! b2 ?6 R过后,我们会给出相应的网页版、C++版、VB版等等。6 @7 {& v1 M: ^. {  m9 P+ c
. P5 S- N% R% w5 N1 y
5.关于本例的一些思考8 ?' C2 e0 i4 o% f

3 \3 K: C' G7 v& W: K  I由相关文献,可知条码技术具有以下优点:* K1 |) ?8 R6 d( d" H: F" @. o: b
4 H7 z( d+ s+ x8 M: f$ w% x1 W  E
  1)、输入速度快; 5 \4 {2 p, Z' ~) C+ h! o
. \2 v! d) p$ o" y5 ]% }6 d9 l
  2)、可靠性高;
) s& @$ s6 B. L) ]! [& Y
9 n0 |2 a3 l$ C; U4 ~  3)、采集信息量大;$ Q& ]: W3 n/ M5 `4 H
( x/ A3 J3 A3 g2 z* {# F
  4)、灵活实用;
  D0 c  z+ n4 y8 @/ l( A) b; F  `6 D3 q( F& ]5 }" \
5)、条码标签易于制作
$ q- ]$ C/ z: p* u; Q# ~$ B6 n: a, `+ Y
6)、识别设备操作容易,不需要特殊培训;
+ N5 O8 \7 x6 I% }5 H/ W6 q  ~" s: A/ }0 M8 k+ j8 Z9 y+ U
7)、设备也相对便宜。
  X2 t3 h" O1 G# d5 \
. I- I5 e1 R# ?+ H, |9 a因此,在平时可以自己构造的加密的编码规则,利用现成的条形码扫描器,可以很快实现特定功能的组建嵌入式的或基于PC的条形码识别系统。
" B) L1 p2 m) P5 M+ h
% X+ s: z+ s& `, _8 S' B$ S& c) k0 a由本文看,尽管一维条形码在各个领域获得了广泛的应用,但其安全性值得商榷。于是,在安全性要求较高或者要求条形码携带更多信息的领域,人们普遍采用二维码。常见的二维码如图四所示(更多资料参照文[2])。4 w$ @) n3 M7 p) f3 v% R) \+ d
4.png
* r" j, @  u2 h图四:常见的二维码- v) A7 O+ t/ `! a, t

- p3 n/ ]- u+ c" A% a4 c# T% d6.免责声明与注意事项
! ]+ T, E. g/ n7 k- B. S& @
$ p2 p9 c; l+ @5 a7 l, }4 R3 z3 f版权所有,翻版必究。0 D6 Z4 t! N$ N- V! [
+ W& P' `1 U, E) D
技术在于交流。本文旨在交流条形码制作技术,并为个人制作提供质量较为上乘的图书证的方法,非经相关方面授权,严禁用于商业用途。有不法分子由此牟利而产生的法律责任,与本人无关。
4 M; V. ]7 l% b# h/ X
! o- b, [3 h9 M2 Y( T& |$ v任何单位或个人认为本文可能涉嫌侵犯其合法权益,应向本文作者提出书面权利通知,并提供身份证明、权属证明及详细侵权情况证明。作者在收到相关法律文件后,将会依法尽快删除本文中违反法律的内容。
' a8 E# s  t4 ]# L4 D. r0 @1 i+ @, E2 `0 C0 H, S. E- @
7.. B; c% `+ N8 Z5 L$ L% _- j2 j
参考文献
4 ?0 T0 }7 X4 X) W( F
5 `2 r$ f+ D1 Y9 _9 E  y[1]条形码—百度百科http://baike.baidu.com/view/13740.htm[2010-09-25]
4 p: t7 ~' e/ f, x* u+ _4 E' l2 D, [/ r1 t$ ]. P  m, E
[2]二维码—百度百科http://baike.baidu.com/view/132241.htm[2010-09-25]
' Y# q: q) [! c/ ?$ \/ k
# ?5 c  n) l# ?1 F7 x) e/ L8.5 N3 q" V* M" y9 F) a
附录5 ^* G6 d* V  T6 V

. ~) D" s8 z% `8 l  V; A相应的MATLAB程序代码如下(该程序经过简单修改,可以写成函数的形式,更方便地进行各种编码规则的条形码的生成):
: W$ F& U& _) a/ v. U$ R" y$ i) e: x/ U  l
%barcode.m% \/ r3 P3 d2 [2 f. Y7 U9 Q0 V
( w- B9 J3 _) Y1 H1 }
%生成学号a对应的条形码
+ d. m- |" B6 s! M9 ^& E# Z& h0 {' }$ `( P8 W
%2011/09/25 13:24 BY小谷同学
6 ]9 ]6 L  T, {
. Y! a6 ]" u& i( S6 k% A5 R7 da='1234567890123';%学号,自行更改
' X( ~) U' @. S# u7 R2 R" c/ G1 c' a4 K) O4 m5 u! G
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;* t$ ^* E6 j0 }3 B; ]

% b0 a0 f* S8 X. O; [- h. z0,1,1,0,0;0,0,0,1,1;1,0,0,1,0;0,1,0,1,0;0,0,1,1,0];%数字编码
# y( s3 N9 B4 K- G) O( L, y+ \
" `& x; n  r$ ~! R, HWhite_num=[0,1,0,0,1];%插入符的编码7 {. ^- J+ b' ?
$ L, n4 p/ J0 @# X
%Black_SE='00110';
3 H* A. M" D: k* _6 c0 [. I' s! }) C3 Z( E  T
%White_SE='10001';White_M='01001';9 ]9 D* p1 ?2 w$ o
& l6 ^+ d* A6 s$ Z; Z
barheight=30;%定义条形码的高度2 K6 M5 ]  @8 H( I( @
5 w. U( Q2 x, Y% ]
barwidth=1;%定义条形码的像素宽度
$ J* w* l: x' f: q8 z
5 R' H  @2 ~: y  ^! P6 s# d% R) O, i% D) e9 M
%可以对特定长度的输入进行控制,本文规定长度为132 ?6 ^; x( h& |% \- S

, K7 f+ v0 v3 c% W; lif length(a)~=13
) B1 h; L& k% u( P/ \" s8 w+ y/ |" h0 M2 T9 }5 `; `1 `5 M

+ `4 }0 ]: }& P$ d& Q0 g/ Perror('图书证必须有13个数字');$ z0 @# q- G$ O% {" i( _2 }
" b$ M; e  q8 u% R5 A3 m* M
end4 o5 ?4 p: }2 E' u  x9 D7 d
6 o  |: A' X9 B3 A0 o3 V5 T
" r; [, f1 F& F: ]- l( w' i- O
barcode_SE=[0,1,1,0,1,0,0,1,0,0,1,0,1,1];4 O0 ^0 Y# I" \4 j: D

% ?+ t/ C7 d, p& M9 O" W9 ~( L9 H%为方便,直接人工得出起始与终止部分的条形码* R9 i2 Y2 S+ _. ]6 I' ]6 w2 I

% @+ ~% `' P. G/ Q' W) _( ~1 S%也可以由程序生成.. Q9 \, w  s9 K! S) Z6 p
8 _4 I# T4 g' F
total=length(a)*(7+7);
( O7 [( d- ~* S/ ^. f+ z" b* Y" @" O( o" e1 b
%条形码的总像素宽
& Q/ Z0 r: L( W7 j; b/ Y! G! G: P
- ~2 B3 Z8 Z/ e%也可以不用求,因MATLAB提供的均是动态数组# o7 z6 `7 J2 R0 i1 j5 v; S# P+ [

9 ~! j  o4 J) K+ L3 Bs=1;%计数,记录' X; x* a7 \+ r$ w, F$ v
7 }, b; B: K3 J) Z9 q# ~( `( x8 N
, K; T/ T- _  y5 `; [3 X, g' @# F
%由于利用for语句容易出现不可预料的错误
2 L" h" [( M3 C3 I8 Q: a  O- O  I" y3 o0 m! e) {) z5 t
%大部分是数组的行标与列标的调用问题,于是采用while循环
& J; A% R8 f2 i$ O. O* a: G7 G1 j! N8 V" n9 \
%嵌套循环,得出数据部分
# j2 J- Q1 @8 q" S$ c' D+ s2 Q2 U; ]3 |3 s3 k" |, l
m=1;
$ c0 f: k6 l( q5 r  |
$ P8 n' f: Z. T) ]" kwhile m<14 ) J6 L% T* x0 E( Y& @

/ t1 A# V- x2 x& [* [7 f/ ~5 Y. A/ |+ ]) T2 M% [2 M
if a(m)=='0';
7 d( e3 M# Q# W7 G! ?$ K  t* z: b/ U+ m5 t
- P  k0 G$ {8 t& G' g, X
t=10;4 `- Y4 y( q0 |+ l9 i0 u4 h0 b& f; b
! }3 l0 J! ?% |% B) L# g( v1 A* O9 Y

7 x) Q3 {: w2 L3 M  o" O7 R5 c5 v0 J%若为数字零,应该调用的下标是10' S1 y: w0 q" ?, K. _
# p) e  ]5 I' I% t7 }, G% }

& i# ]" X* e( t0 Ielse
; Z# G$ d- x% l+ |9 k5 x: G' W& a8 t" Y% C. K
4 c! d! j8 _, p  T' I& T( J' ]) m
t=double(a(m)-48);& h- M0 p- M" s2 L0 L8 _
) X' |8 f/ b" Q4 [9 y! E
%由于输入是ascii字符,转换为整数需要减去30H,即48
: r4 T# b8 F; i( F' j0 L# _9 ]7 u: u

2 Z4 o" [4 B2 F9 s5 Wend
% s( P- V7 A  P! q: V& S5 i3 a$ S! U' n2 L6 H

" [/ ?# y: j/ G& j) Cn=1;%同样的while循环
9 K5 ?- e( z2 E) e
; M% }2 h4 u  R
  p8 r! w' T. b, Twhile n<6$ X. J5 d3 b& L! @" B; b* c
1 c, i* _4 j" b- j8 X

4 V, |$ c, @* U/ uif Black_num(t,n)==0  T1 X. C) q8 R' i
1 \* x/ i3 O9 U

& N2 \5 C9 q0 g; _+ K; Bbarcode_M(s)=0;
7 {/ D7 P; F% Z+ _
& U7 H! Z' L' s, Y1 A/ i! ]! z4 V( [* o! I) S8 v
s=s+1;9 Y3 v8 a6 `  I( ?

8 o" A9 s0 b0 h( g/ `* d: O) }. V- X; y
else
+ L9 v- @9 [& m3 \3 `) k6 g
) `' F5 H/ L* j4 N& G- W! Z% z* z0 N; B( D
barcode_M([s,s+1])=[0,0];6 x: y9 I: L/ t4 v

% y, f, `. D& G7 A% t' C9 d7 o* N, O8 Z; V7 T5 G% ^
s=s+2;8 ?1 s) |# A7 Z+ E; Z5 n- t4 h) i

8 w2 \# N# x" f3 _6 o) n* J+ O6 x' g$ Y4 _/ x! }5 `7 m; |. v! N
end
- c. |1 c/ _" \2 M0 G$ y: M
" s1 D$ Q# u" K' ^6 w* U" h6 ~2 v  e1 U8 N- |+ v# m1 l
if White_num(n)==0
  w( v# G, S% r1 V
% t/ A- X- U: }+ a, D( f, i, s8 T/ h! D) T3 [; l
barcode_M(s)=1;
3 T! R0 u- ?* H1 C6 U
- I( k. ^% z, E- Q
' J' a, z( u' Ds=s+1;2 j# K2 u% Y6 C

2 t7 Y+ i$ c1 X5 C# }$ t; O6 Y* C% ]: F! m. S9 l* a, ?
else
. ?: B* U! @0 B; a
- s/ r4 T7 d1 a* u
0 X' D6 e4 U  p7 ?' \! qbarcode_M([s,s+1])=[1,1];
0 |) H" M( |6 |" G" O
7 s6 |3 o7 z3 {1 G2 E( A: K, r' \6 B# m! u, S9 s
s=s+2;8 M+ p0 M0 J, h$ d

. e* S; H, X5 V2 u& R( Y2 ]
/ l2 V6 Y0 g  q0 `0 T. w& H5 ^" xend
! X" ?, G0 H6 E( v5 u; Y7 I: G; n3 z: T. f  R% a6 ?" d

! ?7 k3 R$ ^0 ^: k# O3 |2 S2 W8 Jn=n+1;
- c6 x1 T1 z: J, n
/ `1 p# q* P7 @  ?5 b& e# o
# ]7 }, k. f& {2 N! Iend1 N. B% x5 A$ C4 p& M0 J3 A; m

" p& s. @7 C1 D- k2 _6 Cm=m+1;
/ t+ O$ U& y9 h* r6 T" f5 V9 Q5 t" b4 ]
end
$ o4 r  w% E3 M; o* r* I6 L  `$ B& u& Q
( ^/ a/ D3 s% S2 c" h
bcode=ones(barheight,1)*[barcode_SE,barcode_M,barcode_SE];
; {( j6 q. ~: o  o6 Z# F
0 S: L  `. q+ d; X6 a7 H%将一位矩阵拉宽,生成给定高度的条形码对应的二值图像的矩阵
% [# p$ W9 J9 M4 S1 `( l5 X/ D; P
bcode=bcode==1;%将数组转换为逻辑数组(Logic Array)
7 i# M- I) W- c4 u  A+ l9 t1 i3 r6 a" g, R0 l
imshow(bcode)%显示所得到得条形码
# A4 M. ~' f9 D8 J7 q; @  b& K7 r6 c+ Q
%然后可以自行存贮得到的条形码* P+ Q7 r' r5 b* K3 a+ \0 j8 Z

7 N0 j, G) n5 ^" X, I$ r7 Y%然后用PS等工具得出具有自己特色图书证啦
+ K! F4 J* \/ ^+ O& Q, Q) w4 E

# h- a2 `4 ]5 s+ a; i6 R6 ^
作者: 孤独的修行者    时间: 2011-9-29 15:16
够强大!!!
作者: lszf    时间: 2011-9-29 20:04
强啊
作者: freedomfox    时间: 2011-9-29 20:36
很强大啊,$ ~8 ^/ C0 x1 B
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?
作者: buguniaoo1991    时间: 2011-9-29 23:50
freedomfox 发表于 2011-9-29 20:36
7 `. l: E- I" m: N# f很强大啊,5 D4 _: L+ [" @1 {/ J# g/ h& t% b
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?{:3_ ...

9 U5 e3 @/ ^* I7 E可以,不过你的学校肯定有记录,一旦发现,后果很严重的;
* i4 E3 J) ^) ~8 a5 q目前我想到是:% I3 a$ y% [6 W
一、去周围学校的图书馆。3 J* [0 Q/ U) f( e8 q/ O
二、自己丢的图书证自己做一个一模一样的来。
2 C% H; v! t( m( Q. W+ @" N三、将图片弄到手机上,然后用手机刷进图书馆,吸引眼球# o2 [, H# ^% z! o8 p- |4 J
四、将来毕业再回学校,再做一个图书证进图书馆/ p/ e. r, K0 x  O

作者: 书呆子    时间: 2011-10-2 22:53
呵呵呵2 ]* |$ m" C0 e4 ?
。。




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