商品条形码

商品条形码(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 :
  * @bolg : http://www.cnblogs.com/yuchuan/
  * @csdn : http://blog.csdn.net/l_lycos
  * @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.value.equals(format)) {
                 saveToGIF(bi, filePath, barCodeName);
             } else if (ImgType.PNG.value.equals(format)) {
                 saveToPNG(bi, filePath, barCodeName);
             } else if (ImgType.JPG.value.equals(format) || ImgType.JPEG.value.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, 96 , 96 );
             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( 11 , 12 ));
                 evensum += Integer.parseInt(code.substring( 9 , 10 ));
                 evensum += Integer.parseInt(code.substring( 7 , 8 ));
                 evensum += Integer.parseInt(code.substring( 5 , 6 ));
                 evensum += Integer.parseInt(code.substring( 3 , 4 ));
                 evensum += Integer.parseInt(code.substring( 1 , 2 ));
                 evensum *= 3 ;
                 oddsum += Integer.parseInt(code.substring( 10 , 11 ));
                 oddsum += Integer.parseInt(code.substring( 8 , 9 ));
                 oddsum += Integer.parseInt(code.substring( 6 , 7 ));
                 oddsum += Integer.parseInt(code.substring( 4 , 5 ));
                 oddsum += Integer.parseInt(code.substring( 2 , 3 ));
                 oddsum += Integer.parseInt(code.substring( 0 , 1 ));
                 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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 最新的100万商品条形码库Excel是一个庞大的商品信息数据库,包含了100万件商品条形码和相关信息。这个数据库可以被各种类型的商品销售商、批发商、零售商和供应商使用。这个Excel表格包含了各种类型的商品,从日用品到高端电子产品都有,可以满足各种不同行业的需求。 这个数据库是一个非常有用的资源,可以帮助企业快速找到所需要的商品信息,提高工作效率和减少错误率。此外,这个数据库是非常易于使用的。只需在Excel表格中输入关键字或条形码,就可以迅速找到所需商品的信息。 这个数据库的优势不仅在于数量多,更重要的是数据的准确性和及时性。这个数据库会定期更新,确保数据的准确性和完整性。同时,这个数据库的价格也非常实惠,可以帮助企业在节省成本的同时提高效率。 总之,最新的100万商品条形码库Excel是一个非常有价值的资源。无论是电商企业还是传统的实体店,都可以从中获得巨大的好处。它不仅可以提高企业的运营效率,还能够帮助企业开发新的销售渠道,扩大市场份额。因此,企业应该认真考虑购买这个商品条形码库Excel,以便更好地发展业务。 ### 回答2: 最新100万商品条形码库excel是一份包含100万个商品条形码的电子表格文档。这个库可以用来帮助商家管理商品,包括库存、销售和定价等方面。它包含了大量的商品信息,可以为商家提供便利。 这个库的编制一般需要采集大量的商品信息,包括商品名称、价格、规格、生产商和发行商等。这些信息需要通过扫描商品条形码来收集。然后,将这些信息整理成电子表格的形式,以便商家使用。 这个库的使用有很多优点。首先,它可以帮助商家更好地管理库存,使他们知道哪些商品需要补货,哪些商品需要减少进货,以便降低库存成本。其次,它可以帮助商家更好地定价,可以根据市场需求和库存情况来调整商品价格,以增加销售额。此外,它还可以提供更好的销售分析,帮助商家了解哪些商品销售最好、哪些销售得不好等。 总之,最新100万商品条形码库excel是一份非常有用的工具,它可以帮助商家更好地管理商品和库存,提高销售业绩,降低运营成本。 ### 回答3: 最新100万商品条形码库Excel是一份非常有价值的资源,它包含了数百万个商品条形码信息,可以帮助商家快速准确地识别商品,方便进行管理和销售。 这份Excel库非常全面,包括各种类型的商品,包括食品、日用品、家电、服装、化妆品等等,覆盖了国内外的主流品牌和厂商,可以满足大部分商家的需求。 使用这份Excel库,商家可以快速添加、修改、删除商品信息,以及查询商品的价格、规格、产地等详细信息,能够大大提高商家的管理效率和销售效果。 但是,在使用这份Excel库时,商家需要注意一些问题,比如要根据自己的实际情况进行筛选,避免同时添加过多相似的商品信息,以及需要定期更新库存和价格等信息,以保证数据的准确性和及时性。 总的来说,最新100万商品条形码库Excel是一份非常实用的资源,可以帮助商家提高管理和销售效率,同时也是一份需要慎重使用和处理的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值