数学建模社区-数学中国

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

作者: buguniaoo1991    时间: 2011-9-28 18:30
标题: DIY系列之——某校图书证条形码制作
DIY系列之——某校图书证条形码制作" T' D! c4 B& F9 K' \0 A
( Q* o. N2 `! v& \( W# ^: ~  Q7 F. O
小谷同学 2011/9/25! }) ~1 E& ]9 C3 Q6 {3 @

: Z8 x2 q( I0 t0 g; V摘要9 O  N. I+ Z  b9 ~% T5 S

7 t* G8 y2 r- q/ m* @& w# r关键词: 条形码
8 E2 k- H0 v/ _/ i" ?, k) i$ g8 D( @8 b0 s4 K; a! [: \% ?
由于印刷质量问题和长期的使用,某些同学的读书证可能会产生读卡不灵敏现象。为了便于解决这些问题,本文给出某校图书证上条形码的编码规则,并给出由这些规则生成条形码的过程。最后本文对条形码在日常应用中可能出现的问题进行了分析,并提出相应的解决方案。
; C, L1 F  o8 z; x2 M
/ k+ o: s* [3 w3 N: ^! f目录5 y: N: }* C: e1 p" u

, v4 U6 |! h3 g5 P1.某校图书证编码规则! ?6 \0 v  x6 l; h% D7 u, O) x

0 V+ y& Z6 s+ ?' |4 P+ g  _! F: \2.条形码制作的过程! }& i) [2 Q5 S9 @0 I& B! Q( T$ C8 c

' U/ U/ {% \& b3.打印与测试
. d# `$ v% A; _0 O5 K, b6 y) C0 x/ m" E
4.扩展应用$ k; p" C1 `- V. F! j3 _- I
7 R5 I) \4 E5 k8 X" I
5.关于本例的一些思考6 O) I* n# L; U) q2 Y- ~( w
1 q& \3 o$ B/ A: Y% Z. ^& n: ~- p
6.免责声明与使用注意事项
. i" L9 _$ [- b) {7 d2 o1 E6 m) b9 i" L6 b) I/ a& Y  E
7.参考文献' }% U- f2 `- X
, T1 g  q! j7 l3 W# M$ {
8.附录, F* ~: V% ?6 Y6 X+ k

' I( ]9 O/ }! O7 _
0 Z; R7 [: f2 o3 ~* Q  l6 x4 a# h! ~, Q" j8 n# T) t3 @) a
* D( X9 i3 N5 ], H* c1 W
条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。有关条形码的更多资料参见文[1]。
4 M; ~+ F0 y& F/ I& f1 a  J; E) {& o6 P: k0 e
在日常生活中,我们不可避免地要接触大量的条形码,其中最常见的就是图书证了。而某些同学的图书证经常丢失。此外,某些同学的图书证由于缺乏保护,会频繁出现录入不灵敏现象。于是在谴责图书证的印刷质量之余,动手DIY一张图书证,自己进行质量控制,则可以使其更加灵敏地识别,大大减少进入图书馆的时间,大大缩短借书时刷卡的时间,提高学习和工作效率。图书证中携带关键信息的就是条形码,于是DIY的重点也是如何得到对应的条形码。/ S2 w! X, t3 I8 ~% |

: ^$ X8 _2 F+ Z4 K. `" R1.某校图书证编码规则
3 y1 D8 v: Y* Q- l& u; O/ Z2 O8 s) ^/ R; g% i
由于所使用的编码方式不同,在了解常用编码规则(参见Internet)的基础上,必须通过对特定图书证的观察才可得出其特殊的编码规则。本文通过,对一种常见的图书证的观察,得出其编码规则如下:+ v( G* K$ n/ `! U  b% h
5 q0 x, v5 M, k$ c/ a
①该条形码部分由两种不同宽度的黑白条组成,是一种类code39编码方式;我们假设宽条代表1,窄条代表0;并假设在最后多一个白色宽条,以便使黑白条码的个数相等,方便程序处理。, f8 S6 L, n, a# v, F

3 E; E+ ^6 \# ^②图书证的白色条码都是一样的,分为以下三部分:
1 t6 M" f# G! @1 X+ ?- h
' W+ T4 ]8 \; z' ^2 ~1)起始部分:10001;2)数据部分:13个01001;3)终止部分:10001,与起始码一致。8 ?, }9 i  \) E+ p5 @. E
4 v# i3 |8 A0 z- S* g; u
③图书证的黑色条码是携带学号信息的关键,分为以下三部分:
" N0 {- x; k# `( ~( Y" j$ m5 {* M
3 u7 \; T" M  T& r% R) ~1)起始部分:00110;( w( Q/ ?* ?( V; d& Y

; h1 t- U- O& S- a2)中间部分:13个数字(即学号12位+图书证序号),每个数字对应的代码如表一所示;
  r2 d2 P  c. l& e8 p2 r4 S& u* q7 i9 s4 t# @1 U
表一 某校图书证号每个数字对应的代码  D2 h+ o- i  {+ D5 k' m$ O' a

, q3 b# |' M. I' v/ [3 T$ R数字 代码 代码数字来源 数字 代码 代码数字来源
! n# j, F3 p; [1 T8 l& }1 10001  1:0001                     6 01100 6:0110
( E. q* J+ E! R( [( s1 |7 X6 t2 01001 2:0010                     7 00011 8:1000 ' r8 Y/ A, O* A) B- z
3 11000 3:0011                     8 10010 9:1001 % o3 Z; T) I8 s& R( [
4 00101 4:0100                     9 01010 10:1010 - m. B" K1 j7 l# E, Z8 Y: W$ ?
5 10100 5:0101                     0 00110 12:1100                    , I, s4 a0 l! Z6 N2 i% a

3 N; I. U- G5 f( c6 a0 a: Q, e说明:每个数字由五个黑条组成,两宽三窄;代码前四位是数字的8421码的倒序,由于最多只能出现两个宽条,于是一次选取最多只出现两个1的8421码作为序号的代码;代码的最后一位用以校验,凑齐“两宽三窄”。5 b1 x6 s; y2 {/ [

- `* s; |* g& A$ q3)终止部分:00110,与起始部分以及数字0的代码都一致。1 B6 E# c9 k1 A" b& n2 A5 p  T
* m/ R8 c* r5 C  y$ _
2.条形码的制作过程
5 Q1 O. A) Q3 }$ c% F1 M
. s- [( n  z/ g! k4 g4 [黑色和白色可以用二值图像来表示,于是我们的关键是如何得到与条形码对应的二维矩阵。
' F/ s# l$ J4 F, D7 O, y' _) W$ I9 B' L3 V" b! Q& |0 g4 Q9 Y' L
定义窄条即代码0的像素宽度为w,宽条即代码1的像素宽度为2w(一般取w=1即可);定义二维矩阵在黑色像素点处值是0,在白色像素点处值是1。此立即上得出与学号对应的条形码的二值图像的矩阵。+ U9 `# D8 I9 P3 `. ?
% f/ N3 i) s9 i2 D' X- o/ R3 d
条形码效果如图所示(程序代码见附件所示)。
( g% ^$ F$ w' n6 m# O; _6 e 1.png $ S% g' U# M# J: w, M  H# l9 \: C
图一 所得条形码效果图
# j" q* u2 L( o) M- B9 ?; j1 D+ A! T& D; x3 I2 P  Z# h
3.打印与测试
  N, v( f# K' w% i5 T2 c
9 ^$ d* ^" R- W8 ~. {' i: V有的制造商在批量打印图书证时不太用心,加上可能设备老旧,所以难免会使某些同学的图书证出现杂纹等印刷质量问题。
; _6 g) H+ m9 z  V9 U3 ]3 v' S& v- |+ k
因此,在DIY的过程中,尽量采用分辨率较高的打印机。对于分辨率较低的打印机,通过修改程序,扩大条形码的宽度,也可打印出质量上乘的条形码(本文测试时采用HP Color LaserJet 2820彩色激光一体机)。
3 f" T* x" D+ a
/ `3 a7 p4 c/ Y7 k! v- d! g0 @. I. \为了方便进行测试,本文打印出不同大小的条形码。
( u& H) Z# o7 l1 e8 }# D; f$ M) R
测试一:将其用透明胶带粘在硬纸板上。: h. B) H& a. \7 x+ f: x
" K. O0 N4 T$ B  o8 P
结果令人遗憾,读卡机根本不识别。通过与图书证比较发现:$ W* [9 ~0 {1 s
3 _7 \4 H, L: T, F2 i
图书证正面的塑胶反射能力很弱,在灯光下几乎看不到灯在其上的虚像;而透明胶带的反射能力很强,可以地清楚灯地虚像。/ w" L( Y9 M) C% Q# P* R) _+ I
3 `# M6 e) O0 ^# q4 I
测试二:找到原因后进行,将与原图书证同样的大小的条形码用胶水贴在硬纸片上,结果顺利该校图书馆通过门禁。We are in now!!0 G! ?3 Y  p+ Y% C

& y6 A/ l/ x6 v效果如图二所示。( `" a. y; A* z" ^  ?9 S; s$ v/ \* |
2.png
* m/ I8 Q! S5 g1 L$ z图二 打印效果图
0 @- r3 R) q* e  {3 G测试三:用打印出的不同大小的条形码逐一进行测试,只有在一定的大小范围才可以通过测试。这说明了,条形码扫描器(注:本文使用的是全角度扫描器,其通过光学系统产生多条扫描线)是有一定的大小识别范围的。6 y) h+ w8 ?  x8 `0 _) J3 `
7 W: y, y1 g( ^" F2 I
4.扩展应用8 Z& g# i3 F; ~' w* M, |

) k+ U; O' b: u' m为了达到逼真的效果,我们做出了图书证模板(MATLAB版),该模板根据用户提供的证号、系部和姓名、照片、字体等信息,自动生成可供彩色打印的图书证如图三。& N8 i2 Q- q5 Y
3.png
6 e1 l6 `! _) l, P! x7 S& m; l图三 可供彩色打印的图书证4 |% h; B4 t7 d, u. ]' j/ T; ]

8 [/ q0 O6 \  ?$ Q过后,我们会给出相应的网页版、C++版、VB版等等。  b- M* |& A/ p" J3 L
6 ]5 B, [/ }0 w' D) {
5.关于本例的一些思考
$ k' r) s) p' L! w9 h0 i) {# ^8 Q7 [, W) {+ v6 X9 |0 F
由相关文献,可知条码技术具有以下优点:1 u5 J2 p& p( U+ x9 F2 \  q
2 a; j" u7 Q9 F1 {
  1)、输入速度快; 8 {: U! e2 t: b4 {+ E/ U" H, |

2 o" y$ P# z6 V$ B2 J' _  2)、可靠性高;9 Q* h6 V0 Q1 R6 R; y5 V

6 A+ l) ^& X2 a- u" O+ R2 h6 B& D: j! M  3)、采集信息量大;
1 Y8 l8 f" P3 C! c& _8 O" l
6 ~) b$ w1 G) O- T  4)、灵活实用;
9 t- @8 H, J7 s; O( a1 ^! D5 s
6 t9 k' o. }8 d) e* y' @5)、条码标签易于制作1 x6 H( ~5 F( C  X3 r3 f

  }. ?2 N! Q: ^) a1 L2 A" p6)、识别设备操作容易,不需要特殊培训;
* f$ _: l# s. m1 O: f- X) g# o1 b9 G9 }$ E+ \& A
7)、设备也相对便宜。
% L2 h* K$ s5 i/ t2 X' p( }7 O, _( @* U! I: ~
因此,在平时可以自己构造的加密的编码规则,利用现成的条形码扫描器,可以很快实现特定功能的组建嵌入式的或基于PC的条形码识别系统。9 b) ]' p: A  w

1 N* {* z. r/ Y9 G由本文看,尽管一维条形码在各个领域获得了广泛的应用,但其安全性值得商榷。于是,在安全性要求较高或者要求条形码携带更多信息的领域,人们普遍采用二维码。常见的二维码如图四所示(更多资料参照文[2])。
: b+ W1 N, i3 P6 c. { 4.png
7 r% g' ?1 P5 ^  j+ I- S图四:常见的二维码
4 ~( m5 Z6 n3 c5 _* A2 k. R5 ]- r1 o( A; L8 r, F/ n
6.免责声明与注意事项
. O2 C1 B7 s; l: U: c9 m1 Z. p5 L5 C; `! d0 Q/ Q
版权所有,翻版必究。
% C9 a. C1 G" w' [0 X4 E0 {2 ?7 x, J' u; K! \5 l
技术在于交流。本文旨在交流条形码制作技术,并为个人制作提供质量较为上乘的图书证的方法,非经相关方面授权,严禁用于商业用途。有不法分子由此牟利而产生的法律责任,与本人无关。
5 E) w; D5 T4 z+ Q( _; s4 m0 U0 Z+ i. Z8 R
任何单位或个人认为本文可能涉嫌侵犯其合法权益,应向本文作者提出书面权利通知,并提供身份证明、权属证明及详细侵权情况证明。作者在收到相关法律文件后,将会依法尽快删除本文中违反法律的内容。 ' l  y7 x0 X+ q" @
' u; U5 w6 p6 ^" {
7.9 t/ Q7 a4 D5 p) }
参考文献
# }8 Z% L. r. w! R& j) H4 A, d; ~# }- x0 O! _5 `4 ?% S1 ^
[1]条形码—百度百科http://baike.baidu.com/view/13740.htm[2010-09-25]$ w: [! u# X. U4 M# r, v
- k- P$ a( f7 m9 _  [& {, k
[2]二维码—百度百科http://baike.baidu.com/view/132241.htm[2010-09-25]* U4 t# N  U. Q$ s2 U2 Y9 f

' m, G- m% y  q$ P& s( G8.# s; Y1 g$ I6 j" R
附录
0 g, |; t: E2 `0 A2 B5 f0 s: Q
4 m# U" R1 x& u$ y; z- P4 H  h6 U相应的MATLAB程序代码如下(该程序经过简单修改,可以写成函数的形式,更方便地进行各种编码规则的条形码的生成):1 D& G5 k5 ~! i2 U# C' Y

* T6 \- C! F0 \- T% d%barcode.m
/ \  Y- L. G5 n' [: G* X. c9 m
( h5 N: c( ~6 u$ ?3 }%生成学号a对应的条形码
2 N! V( n$ a8 F9 U; A* V% Q/ _0 i8 U% `$ ]& K' _
%2011/09/25 13:24 BY小谷同学! J) D( T; s; }' D0 R* q
* S% x0 ?4 q$ h- s
a='1234567890123';%学号,自行更改
' f) X4 w2 f( V0 R& @0 N3 J9 R" u% X' k7 |( z# }$ ?* i, @
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;
# @5 B4 L! M) @/ s1 K" X4 h' d; u: ^0 m% L$ R
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];%数字编码
- d* B1 ]. n- S! N4 Y+ h1 q' L& P8 u' n8 Y' D* I
White_num=[0,1,0,0,1];%插入符的编码( C' o. X7 W. O% M5 K- u

. J3 ?& U7 q% N; v, q%Black_SE='00110';. E! z8 U; ]9 ?/ Z+ w, m
; U5 i" V) ?" B: A+ K; X
%White_SE='10001';White_M='01001';6 m/ r' W6 e( h% l9 V& g" |

0 [& Z( v0 L1 f2 L' Z$ Zbarheight=30;%定义条形码的高度
: J0 [$ }  u# s* ]6 f0 Q8 j8 O( h: S3 c4 i; j! u# d+ o9 G
barwidth=1;%定义条形码的像素宽度
$ S7 U8 y1 e6 j, m' ~9 T7 O  D+ f3 m
+ C. k2 m2 \% ~: O! m  ]. X' s! `  F
%可以对特定长度的输入进行控制,本文规定长度为136 S: N! `- E6 }2 b) h
, R1 u5 e% v# f9 m5 a5 e
if length(a)~=13
* R) h2 a5 F- {' k) i4 A3 d4 X/ ~3 `- s
! d9 k- m+ Z& w5 |
error('图书证必须有13个数字');
5 g( Z3 M' V8 b: l( Y
2 E! ~; w# k( a& Hend6 Z: ~/ s$ f  ~

4 j4 _" H$ {8 e
& N/ P- r5 i  x5 A& _barcode_SE=[0,1,1,0,1,0,0,1,0,0,1,0,1,1];
. |0 P7 z9 @& ~% q, @7 D% t- l! j
% y" A1 P) C# [5 F3 j/ Y/ U%为方便,直接人工得出起始与终止部分的条形码
# x$ p; j9 Z/ F4 R. E( B* ~
5 I8 s: f5 g3 _  J5 G4 \0 M%也可以由程序生成.
2 R4 @) M! z7 F8 c! b' f# _- S9 Z% ~+ [; z# s
total=length(a)*(7+7);1 O0 O, J4 h7 }4 {, Z

+ L3 w3 y5 H" I1 E; Q%条形码的总像素宽% Y: H! Q6 D# s1 U+ P% w" M- v

  D" }: M+ p3 W/ E%也可以不用求,因MATLAB提供的均是动态数组0 m$ K1 o: L+ O7 ^  `: A

4 ^2 |$ {6 |( H8 t0 J8 m0 fs=1;%计数,记录
3 n( C; Q: Y2 c9 Y5 E4 _- B+ z. P' d. N( {& ]; U' k2 q

5 z. m2 F0 X4 _- U$ D%由于利用for语句容易出现不可预料的错误
5 H# ?4 u- c5 k( v+ U  r3 ~3 N% S9 C, H0 j
%大部分是数组的行标与列标的调用问题,于是采用while循环
% v! T8 E% j6 Z5 ~: W! E6 m1 f
7 I4 Q' F& |7 m- {%嵌套循环,得出数据部分! P+ W4 Q" t8 Q: F% v/ ~
) p8 m1 Z+ U: a; v
m=1;! u/ u6 \9 S$ c0 \2 i8 k
9 F, P% X- j/ l- w* m
while m<14
: f/ ]4 B8 d8 k  v. R9 t
8 u9 Y  E- D4 L8 N/ \
/ L5 ?" _) a0 ~" zif a(m)=='0';8 t! J, B- E0 J  S9 L' a2 F! A

/ Y( l4 a8 d9 y: m9 n; W8 c
6 s; J) R5 O% \7 C" G9 B  gt=10;+ T# B9 m: |& V/ r: R" {- @

0 l2 ?# \1 \4 c. z4 G0 \, O. R$ x9 L' i4 j) C/ k; K- @
%若为数字零,应该调用的下标是10
' M1 V6 i# L0 D  q( o& r8 H& ?' i( [9 o# P

% `. u; p& n# Q+ `; F6 j8 v4 A! V- Melse
7 N) u4 {2 O( n' g
/ P/ x5 R( w* Q  `% M( N
* Z9 P: n2 y0 u. ut=double(a(m)-48);5 A" O5 P% M, K1 K0 Q/ `9 i* m; c
7 a% J5 t& v% o; J9 O
%由于输入是ascii字符,转换为整数需要减去30H,即48& [' Y! v+ Y5 Z: l- e3 `
3 z) o0 i' D: W, S
2 T+ u( |' l- |0 @, v# l4 b* s
end0 T& `# P2 e( M6 y7 @: Y
0 y+ E0 Y, ?8 I' ]( r. ^9 }% w; |

$ V' S! E# K# T" m2 M/ u) On=1;%同样的while循环
0 U; K0 ~+ v2 s% H
+ V' P; D- U: r8 x9 F, P! e7 C5 m. ?2 ]0 W
while n<6
% K% |4 A# ]. N, X8 h7 a9 W7 k! z# u( o! b3 K, k: `; a
- \1 F8 R. R, k3 E; o3 C5 D
if Black_num(t,n)==04 [  T, H8 l4 k& w# Y! _
( d$ A  d; t# Z& F5 _; O3 w

+ ?1 \1 N+ Y$ Cbarcode_M(s)=0;# H7 }9 Z, e  Y

# x9 B" n* X6 [! ?" J. r/ A
; h: {: x0 o! i0 u( _7 ts=s+1;
0 H+ _5 P* [# y# ?' X3 e+ [
* f# o+ T* {$ D! v4 j) O* {
* M3 ^, m" g" w6 E, uelse
% C) t: b( i: E* ~8 L/ m1 G, P2 E6 y
* s0 d: }2 D, A. {- s, j
barcode_M([s,s+1])=[0,0];
/ g7 V% B) _( X4 D9 Y
5 r3 ]3 h5 l3 j/ y1 q+ t$ U
1 u# |! o3 X7 P$ q9 bs=s+2;+ k% l6 S. }6 Z
9 `: i! _2 z" l! H3 u; Z0 @9 @
  M0 W8 _1 N3 N" d1 c4 L
end
9 W' t2 Y& ~; M; D; H0 E) r6 _. e  ]6 i) H3 q! N6 g1 v
7 W" F/ d& [4 R' z; O, {
if White_num(n)==0
" j$ D; S1 |; [* L$ z# E: i, r2 m# O3 Y

) v- k* E4 I7 i! ~' h5 fbarcode_M(s)=1;
/ x/ d9 {" p$ s0 B( y' [) a7 [0 a+ \1 V" ^
3 o' Y: r5 [4 h4 _4 M) f! E- J
s=s+1;
  |# Y+ w2 G# N: ^  P5 U4 I* E) L: m. g( \* H% S

6 D* ?6 x  k4 ~; x% b) q6 @/ _- l2 \else) X" d& Q& Q$ s6 [8 [
2 D4 V% J* s1 u# \! n
, {, b3 i; B7 Y
barcode_M([s,s+1])=[1,1];' c# o5 _4 x/ M. x

( Y1 }0 v1 n4 c) d" N( B, B/ |+ p" o0 Z, `9 I- `/ u; R
s=s+2;3 [" x: v3 Y2 a! ^: I/ I! [
* G# _: k) [0 Y. ?3 U; h
& y- h& q* k  b' \5 i* `
end
% K! K+ ?+ [# x" Z& e6 Y6 z7 W# t2 S4 O+ c1 Q! G( @
' p, V1 {+ d2 i! }( s$ i0 n
n=n+1;6 |- R) [- S, H% n5 s

8 ^5 \, }' S- N3 g( C- Z8 ^& i2 }8 E& e7 h
end
6 G- V' V+ b! p1 f+ {) {
, P2 m  T& `+ E; ~  w* fm=m+1;
' }( H4 s$ b# d
. _( z, ^; k3 B3 nend
9 b' k! F! X* M" c: u
* j2 ^# v. t, w4 S% a2 B; h+ _) J. E  J1 O
bcode=ones(barheight,1)*[barcode_SE,barcode_M,barcode_SE];
' G8 Y# U7 O0 V! Q& S
# N1 F/ E8 j1 P- k  z/ E5 m%将一位矩阵拉宽,生成给定高度的条形码对应的二值图像的矩阵  u' C+ \5 V6 V7 l: s

9 h1 P& x1 P3 F6 k# U$ F6 K# rbcode=bcode==1;%将数组转换为逻辑数组(Logic Array)- e6 ~, b- |! q% E, T; [

8 F4 C, N! W4 N! Yimshow(bcode)%显示所得到得条形码
6 k9 ~7 {8 _- L9 N+ T' d; t9 P2 R
%然后可以自行存贮得到的条形码
1 H! K) r2 {2 j3 ~' H! f4 a! o8 r$ Q" K2 a; s6 C9 C4 j! M
%然后用PS等工具得出具有自己特色图书证啦, n* g$ h6 n  F7 ^5 b

1 O3 c9 E; Q, u# R* a) k" \
( @6 g. n( J, C# Z& j6 [7 F1 h' s
作者: 孤独的修行者    时间: 2011-9-29 15:16
够强大!!!
作者: lszf    时间: 2011-9-29 20:04
强啊
作者: freedomfox    时间: 2011-9-29 20:36
很强大啊,$ R  g. E& S, a/ L5 E: \  e
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?
作者: buguniaoo1991    时间: 2011-9-29 23:50
freedomfox 发表于 2011-9-29 20:36 ( s1 M4 N, I% m) @& }
很强大啊,3 Q' D5 ?" D0 D+ ^3 o
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?{:3_ ...

. e7 C- s; K. x可以,不过你的学校肯定有记录,一旦发现,后果很严重的;9 N( L/ h  n$ r+ c' A$ R
目前我想到是:
. u" H* Y3 {5 N8 i4 [一、去周围学校的图书馆。0 C" `) w, H! o9 B
二、自己丢的图书证自己做一个一模一样的来。
$ m4 z" ?+ w" w6 ]0 P/ c6 s三、将图片弄到手机上,然后用手机刷进图书馆,吸引眼球
$ ~* \8 f& H, u; x" w四、将来毕业再回学校,再做一个图书证进图书馆" Z  }7 I, L3 Y

作者: 书呆子    时间: 2011-10-2 22:53
呵呵呵
- d& H  b4 H% C" r。。




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