之前没有使用过这个,现在使用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. 事后分析报告(Postmortem Report)

    小组讨论照片 设想和目标 1.我们的团队项目为英语单词学习助手,名为“我爱记单词”.主要提供服务包括:单词查询,单词测试,单词记忆和中英互译.目前开发的是单机版本,用户可以根据自己的需求灵活的使用相应 ...

  2. log4j.properties 使用

    一.参数意义说明 输出级别的种类 ERROR.WARN.INFO.DEBUG ERROR 为严重错误 主要是程序的错误 WARN 为一般警告,比如session丢失 INFO 为一般要显示的信息,比如 ...

  3. Intellij如何设置编译后自动重新加载class文件?

    前段时间突然发现Intellij不能自动重新加载类了,每次编译后都要重新启动项目,才能显示更新效果,后来网上查询Intellij下如何配置热部署,都说是要配置构件,然后在web容器的编辑页面选择upd ...

  4. 从零开始编写自己的C#框架(3)——开发规范(转)

    由于是业余时间编写,而且为了保证质量,对写出来的东西也会反复斟酌,所以每周只能更新两章左右,请大家谅解,也请大家耐心等待,谢谢大家的支持. 初学者应该怎样学习本系列内容呢?根据我自己的学习经验,一般直 ...

  5. 安卓中級教程(9):pathbutton中的animation.java研究(2)

    src/geniuz/myPathbutton/composerLayout.java package geniuz.myPathbutton; import com.nineoldandroids. ...

  6. C#拾遗-接口与抽象类

    抽象类中可以有构造函数(无参构造函数和有参构造函数)无参构造函数在子类实例化时被调用有参构造函数必须显示调用 抽象类中可以有抽象方法 但是不能有方法体,子类必须实现抽象方法子类必须重写抽象类中的抽象方 ...

  7. centos iptables

    1.查看本机关于IPTABLES的设置情况iptables -L -niptables --listmore /etc/sysconfig/iptablesservice iptables statu ...

  8. org.springframework.web.servlet.DispatcherServlet noHandlerFound

    1 请求URL: http://localhost:8080/mvc/rojas 2 control  RequestMapping  : @RequestMapping(value="xx ...

  9. 提取本地环境中部署RDLC的DLL

    要使用reportviewer来呈现报表,需要有三个dll Microsoft.ReportViewer.WinForms.DLL Microsoft.ReportViewer.WebForms.DL ...

  10. Scala的函数,高阶函数,隐式转换

    1.介绍 2.函数值复制给变量 3.案例 在前面的博客中,可以看到这个案例,关于函数的讲解的位置,缺省. 4.简单的匿名函数 5.将函数做为参数传递给另一个函数 6.函数作为输出值 7.类型推断 8. ...