之前没有使用过这个,现在使用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) {

}

}

mysql 条码长度_商品条形码(JBarcode)相关推荐

  1. mysql 用户名 长度_一个 MySQL 用户名长度的坑

    今天使用 PHP 连接一个 MySQL 数据库的时候连不上,提示无权限. 因为 MySQL 是在另外一个机房,首先想到的是防火墙的原因,但使用 MySQL-cli 却能正常连接,遂排除这种可能. 又怀 ...

  2. mysql signed 长度_浅谈mysql字段长度设置

    mysql 中最常用的数据类型是tinyint,smallint,int,bigint,char,varchar; char(n)和varchar(n)存储固定长度的字符数据,长度最大为254字节.使 ...

  3. mysql 邮箱长度_数据库中电子邮件地址的最佳长度是多less?

    数据库中电子邮件地址的最佳长度是多less? 这里是我查询的一部分,反映了EMAIL_ADDRESS列的数据types和属性: EMAIL_ADDRESS CHARACTER VARYING(20) ...

  4. mysql 条码长度_EAN_13的数据长度是多少位?

    展开全部 EAN13码是商品条码32313133353236313431303231363533e4b893e5b19e31333433633462中的标准码,由国家代码(1-3位),厂商代码(4-8 ...

  5. mysql smallint 长度_转:mysql中int、bigint、smallint 和 tinyint的区别与长度的含义

    bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. P.S. b ...

  6. mysql用户名长度_如何增加PhpMyAdmin / mysql用户帐户的用户名长度?

    ALTER TABLE t1 MODIFY col1 VARCHAR(2000); 如果是MySQL的User表,则以root身份登录 mysql --user=root mysql -pPASSWO ...

  7. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  8. mysql超长sql查询_超长SQL怎么查询?MySQL列长度限制有哪些 | 学步园

    MySQL字符串的限制长度看似重要性不要,其实和整个MySQL数据库的安全性是息息相关的,很值得我们去深入研究分析.SQL注入攻击一直都在被广泛的讨论,然而人们却忽略了今天我将要介绍的这两个安全隐患, ...

  9. mysql 索引太长_修改Mysql索引长度限制

    mysql 索引过长1071-max key length is 767 byte 问题 create table: Specified key was too long; max key lengt ...

最新文章

  1. 64位linux下was宕机,was7经常自动宕机,前方告急,工程师面临崩溃.小弟跪上
  2. 网络抓包工具wireshark and tcpdump 及其实现基于的libpcap
  3. man da'te
  4. 公开课视频与课件(完全免费)-《大企业云桌面部署实战》
  5. 【热点】React18正式版发布,未来发展趋势是?
  6. 如何使用 Node 后端创建 React 应用程序:完整指南
  7. 登陆后保持环境变量导出
  8. 【Python】pandas模块操作大型数据集
  9. NIO的空轮询bug是什么?netty是如何解决NIO空轮询bug的?
  10. scp shell脚本无需密码输入
  11. RocketMQ-项目集成
  12. 湖南大学高级软件开发过程
  13. 【杂】Excel中匹配筛选操作VLOOKUP 函数使用问题排查
  14. android手机fingerprint,Fingerprint HIDL
  15. 故事系列之一:围棋世界里看天赋和勤奋
  16. 计算机网络--哈工大网课--MOOC中国大学 慕课 答案
  17. 含有非期望产出的ZSG-DEA模型
  18. 光纤接续为什么不建议一管多熔?
  19. Origin数据设置为日期/时间的方法
  20. node内存溢出:JavaScript heap out of memory

热门文章

  1. 最土团购系统1.6支持支付宝担保支付的方法
  2. Windows7管理员权限获取
  3. BTS测试实验室--远程文件包含和服务器端注入攻略
  4. 华裔科学家Ashe教授对涉嫌造假的Nature论文的正面回应
  5. C99与C89主要区别
  6. k8s容器日志收集方案
  7. Magento发送的邮件显示由xxx代发
  8. 基于小样本知识蒸馏的乳腺癌组织病理图像分类
  9. 【博学谷学习记录】超强总结,用心分享 | 集合
  10. 千兆光模块与交换机如何搭配使用?