前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Code39字体将文本转换为code39条形码--Java版

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

作者头像
saintyyu
发布2021-11-22 09:52:01
1K0
发布2021-11-22 09:52:01
举报
文章被收录于专栏:IT专栏

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

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

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

Code128A

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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注解

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档