|
总算解决了.原来网上有的资料说得不够充分.即:当待转换字符的asc值超过127的,必须要处理.
我的函数没处理非有效字符,请注意.
附件代码有误.下面是修改后的.主要是asc值不能直接引用,以及休止位的码值是206,而不是附件中的205.
Function code128b(Tar As Range) '128B码:ChrW(204).
Dim s$, i%, ss$, j%, curR%, checkB%
curR = Tar.Row
s = Tar.Value
checkB = 1 '开始位的码值为104 mod 103 =1
For i = 1 To Len(s)
ss = Mid(s, i, 1)
j = Asc(ss) '不过滤无效字符,比如汉字.
If j < 135 Then
j = j - 32
ElseIf j > 134 Then
j = j - 100
End If
checkB = (checkB + i * j) Mod 103 '计算校验位
Next
If checkB < 95 And checkB > 0 Then '有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符).
checkB = checkB + 32
ElseIf checkB > 94 Then '字体设置时,字模被定义了2个值.观察字体文件时能发现.
checkB = checkB + 100
End If
code128b = ChrW(204) & s & IIf(checkB, ChrW(checkB), Chr(32)) & ChrW(206)
End Function
[ 本帖最后由 shuyee 于 2010-1-25 09:57 编辑 ] |
|