您的位置:首页 > 移动开发 > Android开发

android 设置布局动画

2015-08-08 12:16 459 查看
最近的项目有一个条码打印的要求,鉴于很多条码软件/库都是收费的,一直在找免费的.

在Google上搜了很久,资料是不少,但不是免费的就是没有源码的.

于是,决定自己写代码解决.

继续Google,看了下CODE128的原理,貌似挺复杂,还分3个字符集,比较下来决定使用CODESETB.

先简述一下CODE128的原理吧,分别以一个unicode字符作为起始符(Ì)和终止符(Î),
然后需要根据你的字符串,计算出当前字符集的校验码:

#region"本段为转载"

Code128BarcodeTable

Value
CodeSet
A
CodeSet
B
CodeSet
C
Bar/SpacePattern
BSBSBS
0
SP
SP
00
212222
1
!
!
01
222122
2
"
"
02
222221
3
#
#
03
121223
4
$
$
04
121322
5
%
%
05
131222
6
&
&
06
122213
7
'
'
07
122312
8
(
(
08
132212
9
)
)
09
221213
10
*
*
10
221312
11
+
+
11
231212
12
,
,
12
112232
13
-
-
13
122132
14
.
.
14
122231
15
/
/
15
113222
16
0
0
16
123122
17
1
1
17
123221
18
2
2
18
223211
19
3
3
19
221132
20
4
4
20
221231
21
5
5
21
213212
22
6
6
22
223112
23
7
7
23
312131
24
8
8
24
311222
25
9
9
25
321122
26
:
:
26
321221
27
;
;
27
312212
28
<
<
28
322112
29
=
=
29
322211
30
>
>
30
212123
31
?
?
31
212321
32
@
@
32
232121
33
A
A
33
111323
34
B
B
34
131123
35
C
C
35
131321
36
D
D
36
112313
37
E
E
37
132113
38
F
F
38
132311
39
G
G
39
211313
40
H
H
40
231113
41
I
I
41
231311
42
J
J
42
112133
43
K
K
43
112331
44
L
L
44
132131
45
M
M
45
113123
46
N
N
46
113321
47
O
O
47
133121
48
P
P
48
313121
49
Q
Q
49
211331
50
R
R
50
231131
51
S
S
51
213113
52
T
T
52
213311
53
U
U
53
213131
54
V
V
54
311123
55
W
W
55
311321
56
X
X
56
331121
57
Y
Y
57
312113
58
Z
Z
58
312311
59
[
[
59
332111
60
\
\
60
314111
61
]
]
61
221411
62
^
^
62
431111
63
_
_
63
111224
64
NUL
`
64
111422
65
SOH
a
65
121124
66
STX
b
66
121421
67
ETX
c
67
141122
68
EOT
d
68
141221
69
ENQ
e
69
112214
70
ACK
f
70
112412
71
BEL
g
71
122114
72
BS
h
72
122411
73
HT
i
73
142112
74
LF
j
74
142211
75
VT
k
75
241211
76
FF
I
76
221114
77
CR
m
77
413111
78
SO
n
78
241112
79
SI
o
79
134111
80
DLE
p
80
111242
81
DC1
q
81
121142
82
DC2
r
82
121241
83
DC3
s
83
114212
84
DC4
t
84
124112
85
NAK
u
85
124211
86
SYN
v
86
411212
87
ETB
w
87
421112
88
CAN
x
88
421211
89
EM
y
89
212141
90
SUB
z
90
214121
91
ESC
{
91
412121
92
FS
|
92
111143
93
GS
}
93
111341
94
RS
~
94
131141
95
US
DEL
95
114113
96
FNC3
FNC3
96
114311
97
FNC2
FNC2
97
411113
98
SHIFT
SHIFT
98
411311
99
CODEC
CODEC
99
113141
100
CODEB
FNC4
CODEB
114131
101
FNC4
CODEA
CODEA
311141
102
FNC1
FNC1
FNC1
411131
103
StartA
StartA
StartA
211412
104
StartB
StartB
StartB
211214
105
StartC
StartC
StartC
211232
106
Stop
Stop
Stop
2331112
Example...Tocalculatethecheckdigitforthebarcodedatastring'Code128'
Value		Total
==========
StartCodeB104104
Position1C351x35=35
Position2o792x79=158
Position3d683x68=204
Position4e694x69=276
Position505x0=0
Position61176x17=102
Position72187x18=126
Position88248x24=192
=====
1197
=====
1197/103=11remainder64
#endregion
即根据上表,把没个字符的value值乘上字符在字符串中的位置(从1开始算)
把没个乘积加起来
因为CODESETB为104(这是规定,不要问我为什么)
所以,还要加上104
最后,除以103,所得的余数就是校验码的value值,然后在表中找到对应的字符
就可以了.
有心人应该注意到了,value>=95的时候,是没有字符的(事实上还是有的,
只不过是unicode字符)
好了,原理就阐述到这里,还有什么不懂的话,大家看看代码好了.
至于用在水晶报表上的问题,我这里是配合条码字体的,我会上传一个我正在用的字体.
代码如下:
PublicFunctionStringToCode128(ByValinputAsString)AsString
Try
DimendcharAsChar
DimtotalAsInt64=104
DimtmpAsInteger
ForiAsInt16=1Toinput.Length
tmp=Asc(input.Substring(i-1,1))
Iftmp>=32Then
total+=(tmp-32)*i
Else
total+=(tmp+64)*i
EndIf
Next
DimendAsc=totalMod103
IfendAsc>=95Then
SelectCaseendAsc
Case95
endchar="Ã"
Case96
endchar="Ä"
Case97
endchar="Å"
Case98
endchar="Æ"
Case99
endchar="Ç"
Case100
endchar="È"
Case101
endchar="É"
Case102
endchar="Ê"
EndSelect
Else
endAsc+=32
endchar=Chr(endAsc)
EndIf
Return"Ì"&input&endchar.ToString()&"Î"
CatchexAsException
WriteLog(ex.Message,ex.StackTrace)
ReturnString.Empty
Finally
EndTry
EndFunction
我放大一下上面用到的特殊字符,大家看看清楚:
起始符:Ì
终止符:Î
value95:Ã
value96:Ä
value97:Å
value98:Æ
value99:Ç
value100:È
value101:É
value102:Ê
[/code]

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: