数学建模社区-数学中国

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

作者: buguniaoo1991    时间: 2011-9-28 18:30
标题: DIY系列之——某校图书证条形码制作
DIY系列之——某校图书证条形码制作
7 ?. @, R3 N6 t# {, Q" l# C  r/ l$ t" R
小谷同学 2011/9/25
$ p7 P6 \8 U9 m' ^. [& i# T: ]/ ~) U, |: M# w, Z+ u, Y: K
摘要
' t% F8 n4 ?5 [
5 G. U- S' _2 m& @+ t7 D! E关键词: 条形码% m& W7 r$ b& n' {

2 I( {& R! @$ o# d/ z由于印刷质量问题和长期的使用,某些同学的读书证可能会产生读卡不灵敏现象。为了便于解决这些问题,本文给出某校图书证上条形码的编码规则,并给出由这些规则生成条形码的过程。最后本文对条形码在日常应用中可能出现的问题进行了分析,并提出相应的解决方案。" |. ~6 Z0 {6 d

$ n' r8 G% m% m" f) @目录  e- {* m2 S+ z4 ^7 [( }
  L# c' ^: s" n1 Z! m1 i3 L3 X& e
1.某校图书证编码规则2 t, k  ^& |2 b( e2 n: f
9 w1 O- |& c9 k
2.条形码制作的过程
: C7 C( A. l; n$ V$ m
7 g* o9 Q( f( w2 {/ l& j* l) r3.打印与测试4 {9 k7 x3 d( o/ S' E

9 g/ V1 O# w2 b0 N, y1 B4.扩展应用
" G/ b( n7 ^* p: q2 U4 |
% h3 |! E: `1 f, l7 l  B/ f. ~- G5.关于本例的一些思考" K6 R# J/ e( B. n) k3 O; F

" ^6 Z0 K8 ~- [' d" X% y6.免责声明与使用注意事项% f* B+ e. z9 H* L0 R; l/ C

6 x! @4 O7 ~8 x' H! v7.参考文献2 x2 e8 W/ ]  x/ D

9 J) Z$ v0 p5 K' y! Z, w8 u* _9 a' D8.附录: G0 k2 R6 g5 q4 T) _- {1 `  y6 ^

4 X) Z5 B7 y! D! S; q, p
6 |( m: d% v% l: I& A- b% ^' l, t3 ^4 G
' |" S! g% o  L9 L) \' q# \% x" B) ~! g# u- y/ L* D4 h
条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。有关条形码的更多资料参见文[1]。- q, [: ~; B3 F6 I

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

+ Q) R+ L( b) X$ ?6 i1.某校图书证编码规则
$ B% \6 b3 w( Y  m
9 i7 L7 E' S( n9 h4 C/ D由于所使用的编码方式不同,在了解常用编码规则(参见Internet)的基础上,必须通过对特定图书证的观察才可得出其特殊的编码规则。本文通过,对一种常见的图书证的观察,得出其编码规则如下:
8 s3 |0 d* K( s9 ?. ?2 i8 p  A0 ~0 K, N, X; N  R
①该条形码部分由两种不同宽度的黑白条组成,是一种类code39编码方式;我们假设宽条代表1,窄条代表0;并假设在最后多一个白色宽条,以便使黑白条码的个数相等,方便程序处理。; q# y3 F$ M) _

6 z7 b( a/ V2 u4 N②图书证的白色条码都是一样的,分为以下三部分:& h4 e8 R0 R# Q& F: }0 B; k" W) q3 z4 ?
1 @6 J0 A( c3 ?( j& ^, L: v3 y
1)起始部分:10001;2)数据部分:13个01001;3)终止部分:10001,与起始码一致。
5 \: L* m$ w# t
& c5 e& @: y! e5 @③图书证的黑色条码是携带学号信息的关键,分为以下三部分:! l/ {6 A* y  g, C. H
# z; L7 i* Y9 E
1)起始部分:00110;3 b# z! q6 @9 s) w+ E

4 n. L0 w5 W0 z: h2)中间部分:13个数字(即学号12位+图书证序号),每个数字对应的代码如表一所示;   a6 K7 q7 x2 a7 Q9 k
4 c7 h/ a8 G, f5 [+ N
表一 某校图书证号每个数字对应的代码4 y1 U* D- r* H3 i$ s; s+ v# B
9 R; ^* N6 ?5 L! Y2 Z) ~% ]
数字 代码 代码数字来源 数字 代码 代码数字来源
3 e. u* L5 V4 M# t1 10001  1:0001                     6 01100 6:0110
+ Q5 `% z& Y8 N2 01001 2:0010                     7 00011 8:1000
" S# v9 C1 |; q! W8 w3 11000 3:0011                     8 10010 9:1001
. R0 i4 h% y0 l( m+ X4 00101 4:0100                     9 01010 10:1010 $ c" j/ j/ {& O" f3 O7 p
5 10100 5:0101                     0 00110 12:1100                    
; v$ X5 q1 x' O" s+ S( K5 l1 w$ Z" ~' q. p$ J' k
说明:每个数字由五个黑条组成,两宽三窄;代码前四位是数字的8421码的倒序,由于最多只能出现两个宽条,于是一次选取最多只出现两个1的8421码作为序号的代码;代码的最后一位用以校验,凑齐“两宽三窄”。
3 X( h( X; [3 f7 Z5 e, v7 N
! q5 S* n2 w* {2 t  J3)终止部分:00110,与起始部分以及数字0的代码都一致。3 ]; D% g0 B% I7 E' E2 {

8 b  D9 Z1 M0 S- I2 l! x* G4 P2.条形码的制作过程
( `( {' E- [6 T" A$ O' p! w9 o9 }+ R# q" n2 P
黑色和白色可以用二值图像来表示,于是我们的关键是如何得到与条形码对应的二维矩阵。
* V, w& Z- K4 G% s& G9 c9 J: G  Y6 B0 D! R$ X( Q- [! B1 z% F
定义窄条即代码0的像素宽度为w,宽条即代码1的像素宽度为2w(一般取w=1即可);定义二维矩阵在黑色像素点处值是0,在白色像素点处值是1。此立即上得出与学号对应的条形码的二值图像的矩阵。
$ O, {# T6 x8 G" z. l$ ^
% M8 G' ^" a- c2 _  a条形码效果如图所示(程序代码见附件所示)。- T% s. F! q; f: N6 j
1.png " }* K( N% n$ b7 r3 K: ?& Q8 I1 x) {
图一 所得条形码效果图" P9 g1 h3 {1 {& ~& v
. m- w4 |( u. s0 Q& D
3.打印与测试
, k2 M, [) l) B8 F" n7 G( S. p/ ^2 w- r/ Q$ O5 i9 P# _
有的制造商在批量打印图书证时不太用心,加上可能设备老旧,所以难免会使某些同学的图书证出现杂纹等印刷质量问题。$ v7 {' D( |  p( n7 ^5 O
8 H# @- W# c1 L" k/ D0 `* N
因此,在DIY的过程中,尽量采用分辨率较高的打印机。对于分辨率较低的打印机,通过修改程序,扩大条形码的宽度,也可打印出质量上乘的条形码(本文测试时采用HP Color LaserJet 2820彩色激光一体机)。
( B% v* u7 h5 U9 k
- {7 N4 J4 b# q# {& N+ P7 E4 v为了方便进行测试,本文打印出不同大小的条形码。, ^8 a! i; U* r; S" h
" `- B  w# {+ i& {7 @
测试一:将其用透明胶带粘在硬纸板上。
6 }  k* z6 c# R# M+ x
' U7 K( ^6 D, J0 X/ ~: \( _结果令人遗憾,读卡机根本不识别。通过与图书证比较发现:
4 r0 X! P5 [+ C" @
0 H, U* W1 }" w, ]3 U' _图书证正面的塑胶反射能力很弱,在灯光下几乎看不到灯在其上的虚像;而透明胶带的反射能力很强,可以地清楚灯地虚像。5 U) j% B# ]6 K

6 x0 ]4 H8 ~( @* x5 N* Y测试二:找到原因后进行,将与原图书证同样的大小的条形码用胶水贴在硬纸片上,结果顺利该校图书馆通过门禁。We are in now!!& @9 r0 ~$ z- K# A4 M, w

6 ]+ N" Q. i# c4 L* I1 g! h7 e/ O效果如图二所示。2 q  z- a& F2 ~& k) m
2.png 3 Y+ i$ T+ |" q
图二 打印效果图9 P; n' b* ?) y
测试三:用打印出的不同大小的条形码逐一进行测试,只有在一定的大小范围才可以通过测试。这说明了,条形码扫描器(注:本文使用的是全角度扫描器,其通过光学系统产生多条扫描线)是有一定的大小识别范围的。
5 E! `% t; U' t, s1 q) x5 ^7 W2 V4 R' P8 _. ?
4.扩展应用
& R; q5 B6 H4 e1 Q* P% q8 R$ _5 D" X- _7 z9 A+ I
为了达到逼真的效果,我们做出了图书证模板(MATLAB版),该模板根据用户提供的证号、系部和姓名、照片、字体等信息,自动生成可供彩色打印的图书证如图三。2 ~0 U5 O/ ]. F6 E0 D6 w
3.png
. K1 C% B' x0 ^, i0 [+ b图三 可供彩色打印的图书证6 d, ?0 A$ e# @8 S( B8 C. c

3 i# u8 k% P0 l4 D8 L过后,我们会给出相应的网页版、C++版、VB版等等。; v8 @; o! E1 z+ b

  k; k4 {4 B1 ]5 e+ l5.关于本例的一些思考
4 n& B% e7 b) I
0 Z: G8 [$ G5 j& Q1 p5 U由相关文献,可知条码技术具有以下优点:
3 a: K. v- b4 Q! N# b1 o
3 ^. G: m, ~- [) R3 b0 ]! K  1)、输入速度快; $ K2 U( b% ~" J$ V! l

& x; n) Z+ S& u! i% p; ~  2)、可靠性高;
1 L0 O3 j7 G: N5 U/ I! D2 _+ p2 Q
8 J" S+ \9 j6 d5 [9 U/ Q  3)、采集信息量大;- [* j- O' ?! d" W8 k4 e, g

8 E9 t# P( V( _# P) f) H! a  4)、灵活实用;
+ W% G3 R* M( i, s
: _* Y" |, z6 o% V% x* w5)、条码标签易于制作0 q- F; n, L' s, D+ D1 O; U5 x! Q
, Z! X2 Y1 E! @  |. a# r
6)、识别设备操作容易,不需要特殊培训;, D; u! j: [/ x3 \; i' I3 W

. U- Y8 g, l0 G( P0 f; ]3 ~5 e( ]7)、设备也相对便宜。+ a  U. z4 w7 A9 N& ?; L2 d$ d' _5 ^
, {% Q' x+ n" k. ~
因此,在平时可以自己构造的加密的编码规则,利用现成的条形码扫描器,可以很快实现特定功能的组建嵌入式的或基于PC的条形码识别系统。- f, F3 u% W  \) J3 j
1 e% Z9 p! @2 Z  ]; C$ K/ ~
由本文看,尽管一维条形码在各个领域获得了广泛的应用,但其安全性值得商榷。于是,在安全性要求较高或者要求条形码携带更多信息的领域,人们普遍采用二维码。常见的二维码如图四所示(更多资料参照文[2])。
) H: ^9 S) G( F4 C 4.png
* W# @; w/ c. q# ^1 X/ }9 X4 a图四:常见的二维码3 t- `4 e: P$ _5 F  h6 B6 x: T

! k6 K" e) b3 Z' i+ X' q6.免责声明与注意事项$ B' Y/ i, u0 J8 A

! n) u0 W0 u" Y5 S7 P7 R2 ^% m版权所有,翻版必究。
# O0 J6 \- D2 z8 [1 Q& ?7 {& b2 P. D! H. |% k, i
技术在于交流。本文旨在交流条形码制作技术,并为个人制作提供质量较为上乘的图书证的方法,非经相关方面授权,严禁用于商业用途。有不法分子由此牟利而产生的法律责任,与本人无关。
4 K3 j) ~2 F* v
- d" z: Q- `3 i' R  o$ o$ b任何单位或个人认为本文可能涉嫌侵犯其合法权益,应向本文作者提出书面权利通知,并提供身份证明、权属证明及详细侵权情况证明。作者在收到相关法律文件后,将会依法尽快删除本文中违反法律的内容。 9 j5 A4 y; a( d: N

$ o4 W9 ?- F8 C2 p6 h# s7.+ D: d# ~& R) B, Y$ l) R3 Z
参考文献
! U6 L8 o7 |- s  ]4 }3 U( ~& K1 r* t- m* L2 i6 `
[1]条形码—百度百科http://baike.baidu.com/view/13740.htm[2010-09-25]0 ~0 V$ {2 U+ w. P

! b( q' f7 D+ O3 I+ [[2]二维码—百度百科http://baike.baidu.com/view/132241.htm[2010-09-25], d5 A# z6 E# D8 Z- L; R7 h& s4 ~

. ~5 f8 Q" E9 Q" |% e4 m$ J8., Y8 L$ Y* w' o$ N
附录+ Q- t% H6 Q' Y* u4 `- N! j
0 j2 q+ ^; m1 V# P
相应的MATLAB程序代码如下(该程序经过简单修改,可以写成函数的形式,更方便地进行各种编码规则的条形码的生成):
8 V+ q) D* M% m, v! F" r* Q
4 ^* N2 M" T: r%barcode.m# W6 p" G/ H' Q8 B- E2 _

* f' k% f: o9 P( m%生成学号a对应的条形码* t/ k) R3 `4 U9 w# n4 T9 E6 e

: }: D1 V9 g, C) E$ b$ q) q%2011/09/25 13:24 BY小谷同学) I1 M7 B  m1 I7 a/ u( D# m8 g

" e" ~8 w" x7 s2 V! D# i6 Ia='1234567890123';%学号,自行更改
6 u8 S2 }; X5 i9 R* j& J9 b; h" Y& |9 T4 q
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;' Z9 d3 @" z6 t( |! o& C& a: z" F$ I
3 R0 o' E2 @2 }. g4 ^
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];%数字编码  X' X) p$ c0 v+ S/ \, k
8 p  Z$ _8 i+ n- F7 `
White_num=[0,1,0,0,1];%插入符的编码8 l- q% \$ o# h/ i, A+ h
$ O- D$ U" }) d: ]; E) y$ H
%Black_SE='00110';
) Y* g+ o4 Q: T  ^. d# K/ p* @" p& y3 c$ e( u
%White_SE='10001';White_M='01001';
, |- `$ `7 A$ S' _$ H# `( Y' a+ M
8 G; a! H' i* ?7 y6 t% Pbarheight=30;%定义条形码的高度
- N# s' S7 N/ [0 h  D, g! n2 s: G/ \  s; K* m
barwidth=1;%定义条形码的像素宽度2 b& o0 m+ S- c+ u* ^/ l
8 v' D. L! k7 V$ D  _3 k. I( H6 t

. H- v( g; D4 Z* R%可以对特定长度的输入进行控制,本文规定长度为13
: r' U% o7 U+ F6 `; H+ n# X7 m* G" S  t$ g/ y% ~, o
if length(a)~=130 E4 z. {1 n( J9 q- S  Q
6 \6 g# L9 b/ W

$ e4 f2 Y0 i/ A) e$ ?error('图书证必须有13个数字');% ~9 W6 u  q; K
. S6 L0 V/ k$ u0 r  Z
end# X+ ^: H' U7 w- Q0 J1 Q  o
( S8 {. u7 {+ R( w: K+ T2 h+ s

6 @2 b! \4 b# s, _7 _* P- E8 |barcode_SE=[0,1,1,0,1,0,0,1,0,0,1,0,1,1];+ }$ U2 W' J/ n- l5 Z  _
8 s, n( T+ M& B' x& D
%为方便,直接人工得出起始与终止部分的条形码7 v# U' E0 F0 p  C
$ r" c+ Z5 B9 {6 d0 Z
%也可以由程序生成.  H' b1 e1 _* L

1 _" l# i/ Z5 rtotal=length(a)*(7+7);
1 Y+ ~5 v# \' E1 m! f
3 X$ i2 ]8 K$ N+ t%条形码的总像素宽
% H- g) t" K! g2 s+ ^+ K: S9 Z* S) V3 Z$ ]
%也可以不用求,因MATLAB提供的均是动态数组
+ S  C# z7 I+ p- t( z$ `
( d  A) A7 ]- J0 a$ }s=1;%计数,记录
+ T; ~4 A% G( g
, p. u8 D: ^- z
  i" x3 E& m6 [" U" w6 |$ i6 |%由于利用for语句容易出现不可预料的错误
! l( Q7 P+ E7 ]: B. B) c4 R2 \& `1 z2 b7 F: o
%大部分是数组的行标与列标的调用问题,于是采用while循环$ V# ?4 o1 x6 d+ j; A3 v  {5 `+ ]  d

) E0 Q7 T$ o5 M7 q0 `5 H4 V% |8 A%嵌套循环,得出数据部分
: a9 p7 i" y" S- j$ d
" g, p) ?, E: ?/ }m=1;! \  _) V# z4 X2 m: A0 O
7 x% P8 V4 Z: i( ^6 E4 Z
while m<14 9 @0 c8 N+ C; m& V6 i& K

8 I" n  E, P+ I
& q  @* T8 S7 c& R% q: t$ U) Yif a(m)=='0';
8 U# L+ |$ k7 `$ R
- v( p6 E0 d+ V% V# _: r* Y+ m7 s( X5 S  R9 |8 I
t=10;
" v1 l; m& V0 w* R! \8 E" V& L! }3 F, E0 L! e1 p$ |

% Y/ K) C" t3 n7 [% ^%若为数字零,应该调用的下标是10- X2 I+ }7 o% X
& S) {% e  d6 j, U

$ m6 z8 e; R: ]4 ^% [5 G: pelse7 \6 y3 f, r4 s" p. ^, X% S

- {, f% L, F. k& `
! F8 ]' W$ \. {t=double(a(m)-48);* W) c0 z, U7 |1 e# J

9 p0 Z# `: _4 p2 }$ {: G4 Y%由于输入是ascii字符,转换为整数需要减去30H,即48
! x9 o# R0 w( d+ j8 H0 o5 \6 E9 `& R  O0 E9 I
4 g* o4 n, H+ N* S9 I2 u' V8 ]
end
5 s/ J3 _: B& G! y( C& w1 R, c1 N; [( ]& ]9 w3 E( |

) r2 Q% t0 _$ fn=1;%同样的while循环
9 E: ]' Q4 x. @" S# C" j6 x6 E! I: F% j5 l2 \1 \, }2 b" a7 w, y; s

; m8 x; F; `* ^, }while n<6
3 h% O3 P& Z- e% P& `, F
9 n% W5 L6 ^  _' @. c0 `
6 D7 R1 g7 \& Rif Black_num(t,n)==0
$ _* x9 a: l5 K7 ~1 u( S$ i2 [" u
) r+ V4 t( _: v+ N. G  D% b' L2 C( z/ k
barcode_M(s)=0;- x5 m2 t& D$ L; f: s+ {
8 P9 s3 l% J" s+ L7 T4 p( a3 C' }

, ^- x) J) E6 {' ~5 ms=s+1;2 ]5 y3 h+ L( H/ ~0 n) v8 |8 @' k
: R9 h( Z; H/ v/ S% }- [

9 Y8 T# W- o3 U" ?, relse0 k# r+ @( b2 y7 o' e* ^0 U7 l" b
/ e: j  C2 d( C0 V

) D6 K$ l+ U+ Z# @barcode_M([s,s+1])=[0,0];
- R; m- e* Z: {, S
1 b$ D* l3 z7 J" e% x$ f* f0 h/ H( W% R( Y
s=s+2;% Q& C4 f% ?' S' t5 O7 r
9 R% }* b* e8 @3 B

' |" n' w+ D# d4 Uend+ p( ?  i/ o: B5 C: H7 j' z
! e  |$ H" j* G5 b( }% n, Q$ W, p

4 s9 [. V* @5 p1 s" H4 K% bif White_num(n)==0
  u' k0 E/ i0 r! G% i$ ?. W) u5 E/ X- ?* k( [% ~6 {( M

% z/ Q7 M) ^! S9 @& s7 ebarcode_M(s)=1;
9 l* o. A- b$ H% N; y$ b* k$ t" d

  y# m& u6 h% {0 c  b* ?4 es=s+1;2 c4 W0 V. H6 z0 k  O
5 p* ?- u0 Q: G
" p" l1 C$ w1 r; d, m4 C
else7 c7 C7 h3 l, M8 {
% n  o0 x8 s1 x3 u* O
: h2 I  }# ?6 y* ^0 P; ^% q$ U
barcode_M([s,s+1])=[1,1];( W7 s) Y# V- t) P2 t# E- I$ k$ w

* P. ?8 D# t! x! i- S) D  Y. X4 Y2 m0 q8 s3 X& `7 o- I
s=s+2;* l) S# u  d5 x
, g4 F- X" E3 [7 m& ?$ O% n! f  U
5 Y* b' V7 q9 Z/ L' k. X
end/ _' J  f1 o* f
$ s+ J6 W$ {* T" L8 c$ p

! g( \+ M; D" N/ l4 U/ Q* F! In=n+1;: R' n( L8 @% ^) X- `4 v  a

: d, `' q' |/ W7 v5 E
- X4 Y7 K$ X0 K2 hend3 r+ R2 m: P0 e7 Z( ?% U, P( m

. m) g4 j! R; R& Y( }0 h" x8 u3 ~! em=m+1;$ j' c. |6 o, A3 `9 Z8 B; c" @

5 J1 |" q+ I6 }5 l7 U1 eend
4 h) u. v7 b3 U% K9 ?9 k8 y$ W- \3 R+ s8 B4 w3 C9 p" v
9 s( L) b1 j  s
bcode=ones(barheight,1)*[barcode_SE,barcode_M,barcode_SE];& ^% w% \- x* Z- P6 `5 X* M2 v7 N

# J8 z' g  C' ^) P' k%将一位矩阵拉宽,生成给定高度的条形码对应的二值图像的矩阵6 A1 j( T5 N9 j2 l6 h5 S" k; K

. e- b: Z$ @  ]2 Ibcode=bcode==1;%将数组转换为逻辑数组(Logic Array)
* x1 b+ W1 s: X2 I  M9 x+ E
. _/ |6 J, Y; y8 Q+ Rimshow(bcode)%显示所得到得条形码! c& W* F3 N- S6 Y. V
/ y7 q: |% ]4 T' V7 Y9 f
%然后可以自行存贮得到的条形码0 s3 l  d' P; _6 {
! ^! P5 B* ^6 a
%然后用PS等工具得出具有自己特色图书证啦0 S3 O7 a& U  x, o9 m3 @+ ?! z6 Y

4 x* {, }1 P2 X
3 H) Q8 M. Z5 ]6 B: i3 h6 B
作者: 孤独的修行者    时间: 2011-9-29 15:16
够强大!!!
作者: lszf    时间: 2011-9-29 20:04
强啊
作者: freedomfox    时间: 2011-9-29 20:36
很强大啊,  i$ a' o$ t( B$ T: a
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?
作者: buguniaoo1991    时间: 2011-9-29 23:50
freedomfox 发表于 2011-9-29 20:36
" l7 S# b7 ?* a: Q' D+ N" \很强大啊,% c0 q, v# Y- T  f5 L
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?{:3_ ...
7 n  p* i/ }& u0 B) V( o; R
可以,不过你的学校肯定有记录,一旦发现,后果很严重的;5 `2 C9 b, C' q
目前我想到是:& i1 D1 U! A8 E! n' I# q; P! p! q
一、去周围学校的图书馆。1 f; Y1 }  j8 A2 n( q/ S1 n0 N4 Y
二、自己丢的图书证自己做一个一模一样的来。  `" O( u; W9 t3 x# t0 @1 s
三、将图片弄到手机上,然后用手机刷进图书馆,吸引眼球
: ^- z2 |9 _1 ]% ]四、将来毕业再回学校,再做一个图书证进图书馆
: |9 l# X9 R$ R0 e2 u4 a
作者: 书呆子    时间: 2011-10-2 22:53
呵呵呵
5 }% `/ S$ ?6 |/ J。。




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