之前没有使用过这个,现在使用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越来越感兴趣了呢,流程是很简单的。

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

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

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

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

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

  2. 条形码(JBarcode)

    一世尘梦 少小离家老大回,妖娆尘世,程序唧唧:问君能有几多愁,恰是满屏BUG无处修. 商品条形码(JBarcode) 之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作: ...

  3. EAN 通用商品条形码

    商品条形码是指由一组规则排列的条.空及其对应字符组成的标识,用以表示一定的商品信息的符号.其中条为深色.空为纳色,用于条形码识读设备的扫描识读.其对应字符由一组阿拉伯数字组成,供人们直接识读或通过键盘 ...

  4. Jbarcode 条形码生成工具

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

  5. 使用JBarcode生成一维码

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

  6. vue实现带logo的二维码/商品条形码/打印商品吊牌

    一.带logo的二维码 1.安装 npm install vue-qr --save 2.在页面或组件中使用 <template> <div id="qrcode" ...

  7. jar 包 的用处 ,dozer、poi、itext 、jxl 、jbarcode 、itextrenderer jquery 效果

    1.dozer 做类型转换的, 新建 xml 文件 描述两个实体的对应关系 ,DozerBeanMapper mapper =new DozerBeanMapper().addMappingFiles ...

  8. hdu3724 字典树(商品条形码)

    题意:      给你一堆商品的名字,然后给你一些条形码,问你这些条形码转换成的字符串的 前缀在商品中出现的个数,条形码的每个字母是八个二进制数字,有两种数,大的是小的2倍,小的是0,大的是1,这里面 ...

  9. java生产条形码

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

随机推荐

  1. BZOJ4563: [Haoi2016]放棋子

    Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行 ...

  2. CF #374 (Div. 2) D. 贪心,优先队列或set

    1.CF #374 (Div. 2)   D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...

  3. IPV6入门篇

    引言 由于互联网的快速发展与普及,原有的IPV4地址已不能满足网络用户的需求,虽然NAT可以缓解IPV4地址的耗尽,但NAT破坏了网络环境的开放.透明以及端到端的特性,因此IPV6地址协议应运而生.I ...

  4. java并发编程(四)守护进程 线程阻塞的四种情况

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17099981 守护线程   Java中有两类线程:User Thread(用户线程).Da ...

  5. 安卓中級教程(3):ScrollView

    以上是scrollview的圖例,可見srollview是一種滑動功能的控件,亦是非常常見的控件. 一般寫法如下: package com.mycompany.viewscroller; import ...

  6. 返回数据方法DeaCacheCommand,由CRL自动实现

    越来越多的人学起了前端,或许部分的初衷仅是它简单易上手以及好找工作,毕竟几年前只会个html和css就能有工作,悄悄告诉泥萌,这也是博主一年前的初衷 还好numpy, scikit-learn都提供了 ...

  7. 腾讯QQ认证空间4月27日已全面开放申请,欲进军自媒体

    今天看到卢松松的博客上爆出,腾讯QQ认证空间4月27日已全面开放申请的消息,这一消息出来, 马浩周根据提示方法进行申请,下面先说说腾讯QQ认证空间的申请方法: QQ认证空间开放申请公告地址:http: ...

  8. Quartz作业调度框架及时间表达式的含义和语法

    Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.本 ...

  9. ip_conntrack table full dropping packet错误的解决方法

    ip_conntrack表满导致的,iptables开启后会加载ip_conntrack模块,来跟踪包.默认情况下ip_conntrack_max大小为65536. 查看ip_conntrack最大大 ...

  10. Java 005 枚举

    枚举概述:就是有有限值的集合或类.是指将变量的值一一列出来, 变量的值只限于列举出来的值得范围. 举例: 一周7天, 一年12个月等.回想单列设计模式: 单例类是一个类只有一个实例.那么多例类就是一个 ...