39码 128B码解决方案

39码可以直接用字体代替,来字符前后都加下“*”,即可被条码枪识别。

128B码的话,用字体加算法的方法才行,要计算开始位、校验位、结束位。

VBA计算方法:

View Code
 1 Function code128b(Tar As Range)   '128B码:ChrW(204).
 2  Dim s$, i%, ss$, j%, curR%, checkB%
 3  curR = Tar.Row
 4  s = Tar.Value
 5  checkB = 1  '开始位的码值为104 mod 103 =1
 6  For i = 1 To Len(s)
 7      ss = Mid(s, i, 1)
 8      j = Asc(ss) '不过滤无效字符,比如汉字.
 9      If j < 135 Then
10          j = j - 32
11      ElseIf j > 134 Then
12          j = j - 100
13      End If
14      checkB = (checkB + i * j) Mod 103   '计算校验位
15  Next
16  If checkB < 95 And checkB > 0 Then  '有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符).
17      checkB = checkB + 32
18  ElseIf checkB > 94 Then '字体设置时,字模被定义了2个值.观察字体文件时能发现.
19      checkB = checkB + 100
20  End If
21  code128b = ChrW(204) & s & IIf(checkB, ChrW(checkB), Chr(32)) & ChrW(206)
22  End Function


C#计算方法:

 

View Code
 1  private string Get128CodeString(string inputData)
 2         {
 3             string result;
 4             int checksum = 104;
 5             for (int ii = 0; ii < inputData.Length; ii++)
 6             {
 7                 if (inputData[ii] >= 32)
 8                 {
 9                     checksum += (inputData[ii] - 32) * (ii + 1);
10                 }
11                 else
12                 {
13                     checksum += (inputData[ii] + 64) * (ii + 1);
14                 }
15             }
16             checksum = checksum % 103;
17             if (checksum < 95)
18             {
19                 checksum += 32;
20             }
21             else
22             {
23                 checksum += 100;
24             }
25             result = Convert.ToChar(204) + inputData.ToString() + Convert.ToChar(checksum) + Convert.ToChar(206);
26             return result;
27         }

 

 

posted @ 2012-05-21 13:59  angtianqiang  阅读(496)  评论(0编辑  收藏  举报