条码打印
2020/3/29 16:02:20
本文主要是介绍条码打印,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近项目中用到条码打印功能,以往使用code39码字体格式,但由于条码较小打印不下,改用code128码解决。
使用128码开始并不能被识别,查找资料后了解到128码打印需要特殊处理,即需要打印的字符串A,需要经过系列运算 加工成 B,才能被识别。加工过程代码如下(C#代码,其他语言应类似)
public static string GetCode128Str(string vInStr) { //临时变量。用来 int nTemp = 0; int[] nChrInstr = null; char vInstr_Code128 = ' '; char[] vInstrArray = vInStr.ToCharArray(); for (int i = 0; i < vInstrArray.Length; i++) { if (i == 0) { nChrInstr = new int[vInstrArray.Length]; } //将字符转换成ASC码 nChrInstr[i] = (int)vInstrArray[i]; //ASC码进行运算,转换字节 if (nChrInstr[i] >= 32) { nTemp = nTemp + (vInstrArray[i] - 32) * (i + 1); } else { nTemp = nTemp + (vInstrArray[i] + 64) * (i + 1); } } //把每个字符的value值 乘上 字符在字符串中的位置(从1开始算)把每个乘积加起来, //因为CODESET B 为104(这是规定不要问我为什么),所以,还要加上104。 //最后,除以103,所得的余数就是 校验码 的value值,然后在表中找到对应的字符就可以了。 //注:以上是资料上写的 本人也不是太明白 int nCode = (nTemp + 104) % 103; if (nCode >= 95) { switch (nCode) { case 95: vInstr_Code128 = 'Ã'; break; case 96: vInstr_Code128 = 'Ä'; break; case 97: vInstr_Code128 = 'Å'; break; case 98: vInstr_Code128 = 'Æ'; break; case 99: vInstr_Code128 = 'Ç'; break; case 100: vInstr_Code128 = 'È'; break; case 101: vInstr_Code128 = 'É'; break; case 102: vInstr_Code128 = 'Ê'; break; } } else { nCode = nCode + 32; vInstr_Code128 = (char)nCode; } string vReturnStr = "Ì" + vInStr + vInstr_Code128 + "Î"; return vReturnStr; }
以上为转换过程,已验证可用,具体算法规则 还需后续对128编码规则的定义来理解。
补充:
1、code39需要将打印的串 前后用星号(*)包起来。即需打印传A, 实际打印时需 *A*
。
2、code128比code39应该更灵活,单位长度里编码密度更高
这篇关于条码打印的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具