利用Code39字体将文本转换为code39条形码--Java版

 

        在项目开发过程中,遇到一个需求,需要将大量商品信息存储到excel中,供用户下载。其中商品的upc字段需要是条形码,以方便用户用扫码枪扫描。常见的方案是将upc转换为条形码的图片。但在项目中发现, 当商品的数量为数千时,会因为文件太大而无法下载。考虑到可以在客户端安装一些条码字体,从而在服务端就无须生成条形码图片,即使商品数量为数千,其下载文件也很小。利用Code128字体将文本转换为code128条形码一文中提到可以通过在客户端提供Code128这种字体的方式来产生条形码,不过提到了直接将原文转换成Code128字体无法被扫码枪扫描。

        经过本人亲测,在Excel中,直接将原文转换成Code128,使用项目组的扫码枪确实不能解析。不过奇怪的是,我使用微信进行扫码,是能够正常解析的。为了进一步搞清楚这个问题,本人还进行了测试,在一些免费的条形码再线生成网站(如 在线免费生成条码)上生成的编码为Code128的条形码,使用项目组的扫码枪是能解析的!!!仔细对比了Excel生成的Code128条形码和网站生成的Code128条形码,确实长得不一样。综上,可以得出结论:Excel生成的条形码并非不能解析,取决于扫码枪是否支持,并非Excel生成的Code128条形码有问题!!!

        不过,到此依然没能解决项目组遇到的问题。利用Code128字体将文本转换为code128条形码一文中提到,可以通过先将原文经过一次编码再使用Excel的Code128字体进行编码,即可被扫码枪识别。不过,博客中使用的是C#语言实现的,本文给出其对应的Java版如下:

Code128A

public String getCode128A(String inputData){int checksum = 103;for (int ii = 0; ii < inputData.length(); ii++){if (inputData.charAt(ii) >= 32){checksum += (inputData.charAt(ii) - 32) * (ii + 1);}else{checksum += (inputData.charAt(ii) + 64) * (ii + 1);}}checksum = checksum % 103;if (checksum < 95){checksum += 32;}else{checksum += 100;}return (char) (203) + inputData + (char)(checksum) + (char) (206);}

Code128B

public String getCode128B(String inputData){int checksum = 104;for (int ii = 0; ii < inputData.length(); ii++){if (inputData.charAt(ii) >= 32){checksum += (inputData.charAt(ii) - 32) * (ii + 1);}else{checksum += (inputData.charAt(ii) + 64) * (ii + 1);}}checksum = checksum % 103;if (checksum < 95){checksum += 32;}else{checksum += 100;}return (char)(204) + inputData + (char) checksum + (char)(206);}

Code128C

public static String getCode128C(String inputData){String result = "";int checksum = 105;int j = 1;for (int ii = 0; ii < inputData.length(); ii++){if (ii % 2 == 0){checksum += Integer.parseInt(inputData.substring(ii, 2)) * j;if (Integer.parseInt(inputData.substring(ii, 2)) < 95){result += (char)(Integer.parseInt(inputData.substring(ii, 2)) + 32);}else{result += (char)(Integer.parseInt(inputData.substring(ii, 2)) + 100);}j++;}ii++;}checksum = checksum % 103;if (checksum < 95){checksum += 32;}else{checksum += 100;}result = (char)(205) + result + (char)(checksum) + (char)(206);return result;}

        读者可以使用以上Code128的以上三种具体的编码方式进行尝试。非常可惜的是,本人使用这种方式,项目组的扫码枪仍然不能识别!!!只能另寻出路。

        最后在参考博客 EXCEL中实现将数字转为条形码中找到了新的编码方式:Code39。经过对比,选择了C39HrP72DmTt这种具体的编码方式,支持字符和数字,能满足绝大多数场景,且生成的条形码非常短。不过,最最重要的还是,我们项目组的扫码枪能识别!!!

参考博客:

1. https://www.cnblogs.com/qq458978/p/7677832.html 利用Code128字体将文本转换为code128条形码(C#版)

2. http://apps.99wed.com/360app/barcode/ 条形码生成器

3. http://gaoqiancheng.blog.sohu.com/301723626.html EXCEL中实现将数字转为条形码

4. https://barcode.tec-it.com/zh/Code128 在线免费生成条码

5、https://www.cnblogs.com/bluekang/p/13438666.html EasyExcel注解


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部