一世尘梦

少小离家老大回,
妖娆尘世,程序唧唧;
问君能有几多愁,
恰是满屏BUG无处修。

商品条形码(JBarcode)

之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作:

Eclipse
Eclipse Java EE IDE for Web Developers.
Version: Helios Service Release 1
Build id: 20100917-0705

jar包
JBarcode-Recognition_Source-0.2.jar
jbarcode-0.2.8.jar
commons-lang-2.6.jar

首先了解EAN-13码的规则:

然后大家去了解一下这些数字的排列:

13位条形码分位处理就看出来,这些都需要自己加工处理并做截取处理,可以了解条形码每个段位表达的意思。

知道这些就已经足够我们去做一个条形码的校验工作以及生成自己的条形码。

了解校验码是怎么回事,我们根据我们自己的需求去做,然后根据需求处理一下,就是我们想要的条形码。

校验码生成规则如下:

注意:这里的校验码,如果减掉后的C的结果为0或者10,那么最后一位的校验码就是0

现在是不是对JBarcode越来越感兴趣了呢,流程是很简单的。

明天小媳妇的巧克力就到了,加油写代码为了小媳妇的巧克力。,,,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
package com.liuyc.test.demo;
 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.regex.Pattern;
 
import org.apache.commons.lang.StringUtils;
import org.jbarcode.JBarcode;
import org.jbarcode.encode.EAN13Encoder;
import org.jbarcode.paint.EAN13TextPainter;
import org.jbarcode.paint.WideRatioCodedPainter;
import org.jbarcode.paint.WidthCodedPainter;
import org.jbarcode.util.ImageUtil;
 
/**
 *
 * @=============================================
 *
 * @author : Liuyc
 * @create : 2015年1月26日 14:47:57
 * @update :
 * @E-mail : 763999883@qq.com
 * @desc :
 *
 * @=============================================
 */
public class BarCodeImage {
 
    /**
     * 图片类型
     */
    public enum ImgType {
        /**
         * 图片格式:.gif
         */
        GIF(".gif"),
        /**
         * 图片格式:.png
         */
        PNG(".png"),
        /**
         * 图片格式:.jpg
         */
        JPG(".jpg"),
        /**
         * 图片格式:.jpeg
         */
        JPEG(".jpeg"), ;
 
        ImgType(String value) {
            this.value = value;
        }
 
        private final String value;
 
        public String getValue() {
            return value;
        }
    }
 
    /**
     * 生成商品条形码
     *
     * @param filePath
     *            商品条形码图片存放路径:../xxx/yyy/
     * @param jbarCode
     *            商品条形码:8位、13位
     * @param format
     *            商品条形码图片格式:.gif/.png/.jpg/.jpeg
     * @return 图片存放路径+图片名称+图片文件类型
     */
    public String createBarCode(String filePath, String jbarCode, String format) {
        String barCodeName = jbarCode + format;
        try {
            BufferedImage bi = null;
            int len = jbarCode.length();
            String barCode = jbarCode;
            if (len == 12) {
 
            else if (len == 13) {
                int backCode = checkCode(jbarCode);
                int oldCode = Integer
                        .parseInt(jbarCode.substring(len - 1, len));
                if (oldCode != backCode) {
                    return null;
                }
                barCode = jbarCode.substring(0, jbarCode.length() - 1);
            }
             
 
            JBarcode localJBarcode13 = new JBarcode(EAN13Encoder.getInstance(),
                    WidthCodedPainter.getInstance(),
                    EAN13TextPainter.getInstance());
 
            bi = localJBarcode13.createBarcode(barCode);
 
            if (ImgType.GIF.equals(format)) {
                saveToGIF(bi, filePath, barCodeName);
            else if (ImgType.PNG.equals(format)) {
                saveToPNG(bi, filePath, barCodeName);
            else if (ImgType.JPG.equals(format) || ImgType.JPEG.equals(format)) {
                saveToJPEG(bi, filePath, barCodeName);
            }
 
            localJBarcode13.setEncoder(EAN13Encoder.getInstance());
            localJBarcode13.setPainter(WideRatioCodedPainter.getInstance());
            localJBarcode13.setTextPainter(EAN13TextPainter.getInstance());
            localJBarcode13.setShowCheckDigit(false);
            return filePath + barCodeName;
        catch (Exception localException) {
            localException.printStackTrace();
            return null;
        }
    }
 
    /**
     * 生成JPEG图片
     *
     * @param paramBufferedImage
     * @param paramString
     */
    @SuppressWarnings("unused")
    private void saveToJPEG(BufferedImage paramBufferedImage, String filePath,
            String fileName) {
        saveToFile(paramBufferedImage, filePath, fileName, "jpeg");
    }
 
    /**
     * 生成PNG图片
     *
     * @param paramBufferedImage
     * @param paramString
     */
    @SuppressWarnings("unused")
    private void saveToPNG(BufferedImage paramBufferedImage, String filePath,
            String fileName) {
        saveToFile(paramBufferedImage, filePath, fileName, "png");
    }
 
    /**
     * 生成GIF图片
     *
     * @param paramBufferedImage
     * @param paramString
     */
    private void saveToGIF(BufferedImage paramBufferedImage, String filePath,
            String fileName) {
        saveToFile(paramBufferedImage, filePath, fileName, "gif");
    }
 
    /**
     * 保存图片文件
     *
     * @param paramBufferedImage
     *            图片流
     * @param filePath
     *            文件路径
     * @param imgName
     *            图片参数
     * @param imgFormat
     *            图片格式
     */
    private void saveToFile(BufferedImage paramBufferedImage, String filePath,
            String imgName, String imgFormat) {
        try {
            FileOutputStream fileOutputStream = null;
            try {
                String rootPath = this.getClass().getClassLoader()
                        .getResource("/").getPath();
                String imgDir = StringUtils
                        .substringBefore(rootPath, "WEB-INF").concat(filePath);
                String dirPath = "";
                try {
                    dirPath = URLDecoder.decode(imgDir, "UTF-8");
                catch (UnsupportedEncodingException uee) {
                    uee.printStackTrace();
                }
                File dirFile = new File(dirPath);
                if (!dirFile.exists()) {
                    dirFile.mkdirs();
                }
                String imgPath = dirPath + "/" + imgName;
                fileOutputStream = new FileOutputStream(imgPath);
            catch (Exception e) {
                System.out.println("Create Img File Error:" + e.toString());
            }
            ImageUtil.encodeAndWrite(paramBufferedImage, imgFormat,
                    fileOutputStream, 9696);
            fileOutputStream.close();
        catch (Exception localException) {
            System.out.println("Save Img File Error:" + localException);
            localException.printStackTrace();
        }
    }
 
    /**
     * 返回校验码
     *
     * @param code
     *            商品条形码
     * @return 校验码: -1:格式不正确,条形码为全部数字 -2:参数不能为空
     *
     */
    private int checkCode(String code) {
        int checkCode = -1;
        if (code == null || "".equals(code)) {
            return -2;
        else if (!Pattern.compile("^[0-9]*$").matcher(code).matches()) {
            checkCode = -1;
        else {
            try {
                int evensum = 0// 偶数位的和
                int oddsum = 0// 奇数位的和
                evensum += Integer.parseInt(code.substring(1112));
                evensum += Integer.parseInt(code.substring(910));
                evensum += Integer.parseInt(code.substring(78));
                evensum += Integer.parseInt(code.substring(56));
                evensum += Integer.parseInt(code.substring(34));
                evensum += Integer.parseInt(code.substring(12));
                evensum *= 3;
                oddsum += Integer.parseInt(code.substring(1011));
                oddsum += Integer.parseInt(code.substring(89));
                oddsum += Integer.parseInt(code.substring(67));
                oddsum += Integer.parseInt(code.substring(45));
                oddsum += Integer.parseInt(code.substring(23));
                oddsum += Integer.parseInt(code.substring(01));
                int sum = evensum + oddsum;
                int ck = 0;
                if (sum % 10 == 0) {
                    ck = sum;
                else {
                    ck = (sum / 10 1) * 10;
                }
                checkCode = ck - sum;
            catch (NumberFormatException e) {
                System.out.println("BarCode Format Error:" + e.toString());
            catch (Exception e) {
                System.out.println("Get Check Code Error:" + e.toString());
            }
        }
        return checkCode;
    }
 
    /**
     * @param args
     */
    public static void main(String[] args) {
 
         
 
    }
 
}

载请标明出处,出处地址 http://www.cnblogs.com/yuchuan/p/4250328.html
 
分类: Java

条形码(JBarcode)的更多相关文章

  1. Java 条形码生成(一维条形码)

    utl:http://mianhuaman.iteye.com/blog/1013945 在这里给大家介绍一个java 生成条形码 jbarcode.jar 生成条形码 支持EAN13, EAN8, ...

  2. Jbarcode 条形码生成工具

    一.准备jar包 https://sourceforge.net/projects/jbcode/?source=typ_redirect 二.编写工具类 package com.example.de ...

  3. Java 条形码 二维码 的生成与解析

    Barcode简介 Barcode是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的,一种机器可读的数据表示方式. Barcode的形式多种多样,按照它们的外观分类: Lin ...

  4. 商品条形码(JBarcode)Java版(二)

    下午开了一个下午的会议,其实开会我听不进去,因为今天妖都特别冷,下班在公司等待小媳妇一个钟头,然后带着她去吃饭,吃完饭回到家.她做运动,我就开始慢慢整理我自己的小博客. ——题记 先说一下,写这篇文章 ...

  5. 商品条形码(JBarcode)

    之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作: Eclipse:Eclipse Java EE IDE for Web Developers.Version: Hel ...

  6. java生成条形码工具类

    package com.runtime.extend.utils.CodeCreate;import java.awt.Color;import java.awt.Font;import java.a ...

  7. 使用JBarcode生成一维码

    需要的jar包,只有jbarcode.jar 链接: https://pan.baidu.com/s/1o9oDPB8 密码: x367 public class Main { //设置条形码高度 p ...

  8. Java条形码插件

    项目中需要用条形码插件,基于Java平台的 需要比较简单,根据一个12位的数字生成一个条形码图片即可 之前一直用Google的Zxing,因为功能强大,调用简单,网上也有很多资料 后来发现,Zxing ...

  9. java生产条形码

      一.通过JBarcode(此种方式可以隐藏掉条形码下面的字符串)   1.下载jar包  jbarcode-0.2.8.jar  目前maven中央仓库并没有jbarcode的坐标  如果是mav ...

随机推荐

  1. SQLServer 2008 技术内幕——T-SQL 查询 笔记

    原文:SQLServer 2008 技术内幕--T-SQL 查询 笔记 1.SQL编程有许多独特之处,如:面向集合的思维方式.查询元素的逻辑处理顺序.三值逻辑.如果不掌握这些知识就开始用SQL编程,得 ...

  2. SQL Server 数据库索引

    原文:SQL Server 数据库索引 一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: ...

  3. sql 学习笔记 档

    从下面的内容 3c   school 1:Sql 它分为两部分: 6 2:查询 7 3:插入: 9 4:数据库更新 UPDATE 9 5:删除 DELETE 10 6:Sql TOP 子句: 10 7 ...

  4. js 性能优化整理之 缓存变量

    简单的常见的操作:假设每个便签添加一个  属性   -webkit-animation-delay:0.1s 递增操作::通过for循环添加 <ul id="uls"> ...

  5. ios 串

    1.是推断包括字符串 if( [str rangeOfString:@"hello"].location != NSNotFound) { NSLog(@"yes&quo ...

  6. JAVA多线程两个实用的辅助类(CountDownLatch和AtomicBoolean)

    AtomicBoolean它允许一个线程等待一个线程完成任务,然后运行: A boolean value that may be updated atomically. See the java.ut ...

  7. ubuntu13.10 下一个 g++和gcc 4.8不兼容的问题不能被安装

    前gcc这是4.8.x.导致g++不能用.因此,要 网上找了很多办法,在安装过程中或这些以下问题的出现: 1. Unable to exec g++.real: 没有那个文件或文件夹 2. 下列软件包 ...

  8. JAVA深入研究——Method的Invoke方法(转)

    在写代码的时候,发现Method可以调用子类的对象,但子类即使是改写了的Method,方法名一样,去调用父类的对象也会报错,虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java ...

  9. SRM 587 Div II L3:ThreeColorabilityEasyy

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12699 这道题目是第一次在比赛的时候做出来的,开始还想用bru ...

  10. Oracle使用并行索引需要注意的问题

    当索引的结构.我们要建立索引快.它将并行加,加平行后.这将平行的列索引. 当并行度索引访问,CBO你可能会考虑并行运行,这可能会导致一些问题.作为server候用并行会引起更加严重的争用.当使用并行后 ...