android 设置布局动画
2015-08-08 12:16
459 查看
最近的项目有一个条码打印的要求,鉴于很多条码软件/库都是收费的,一直在找免费的.
在Google上搜了很久,资料是不少,但不是免费的就是没有源码的.
于是,决定自己写代码解决.
继续Google,看了下CODE128的原理,貌似挺复杂,还分3个字符集,比较下来决定使用CODESETB.
先简述一下CODE128的原理吧,分别以一个unicode字符作为起始符(Ì)和终止符(Î),
然后需要根据你的字符串,计算出当前字符集的校验码:
#region"本段为转载"
Example...Tocalculatethecheckdigitforthebarcodedatastring'Code128'value98:Æ
在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 |
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:Å
value99:Ç
value100:È
value101:É
value102:Ê[/code]
相关文章推荐
- android-----ANR
- [Android Studio 权威教程]AS 中配置强大的版本管理系统(Git、SVN、等)
- [Android Studio 权威教程]AS构建系统-Gradle
- [Android Studio 权威教程]断点调试和高级调试
- [Android Studio 权威教程]AS添加第三方库的6种方式(Jar,module,so等)
- [Android Studio 权威教程]最实用的快捷键
- [Android Studio 权威教程]Android Studio 三种添加插件的方式
- [Android Studio 权威教程]配置出“NB”的Android Studio
- [Android Studio 权威教程]离线配置SDK,创建第一个AS项目
- [Android Studio 权威教程]Windows下安装Android Studio
- [Android Studio 权威教程]Mac下安装Android Studio
- android 当不点击的时候不会出现键盘,点击后出现键盘
- adb停止工作解决
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- AsyncTask异步加载
- Android Studio插件和工具
- Android兼容性测试框架(CTS)手册
- android USB OTG功能实现
- Android单元测试初探——Instrumentation
- Android之——屏幕适配px转dip