java - 如何使用 barcode4j 生成随机条形码代码?

标签 java random barcode4j

我尝试过使用这种方式生成随机 ean-8 条形码。我生成了从 10000000 到 99999999 的随机数,以生成 ean-8 代码的随机 8 位数字。它给我一个错误。

Exception in thread "main" java.lang.IllegalArgumentException: Checksum is bad (1).    Expected: 7
at org.krysalis.barcode4j.impl.upcean.EAN8LogicImpl.handleChecksum(EAN8LogicImpl.java:85)
at org.krysalis.barcode4j.impl.upcean.EAN8LogicImpl.generateBarcodeLogic(EAN8LogicImpl.java:102)
at org.krysalis.barcode4j.impl.upcean.UPCEANBean.generateBarcode(UPCEANBean.java:93)
at org.krysalis.barcode4j.impl.ConfigurableBarcodeGenerator.generateBarcode(ConfigurableBarcodeGenerator.java:174)
at barcode2.BARCODE2.main(BARCODE2.java:42)
Java Result: 1

这是代码。

import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.krysalis.barcode4j.BarcodeException;
import org.krysalis.barcode4j.BarcodeGenerator;
import org.krysalis.barcode4j.BarcodeUtil;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;

public class BARCODE2 {
public static void main(String[] args) throws ConfigurationException, BarcodeException, IOException {

BarcodeUtil util = BarcodeUtil.getInstance();
BarcodeGenerator gen = util.createBarcodeGenerator(buildCfg("ean-8"));

OutputStream fout = new FileOutputStream("ean-8.jpg");
int resolution = 200;
BitmapCanvasProvider canvas = new BitmapCanvasProvider(
    fout, "image/jpeg", resolution, BufferedImage.TYPE_BYTE_BINARY, false, 0);

int min = 10000000;
int max = 99999999;

Random r = new Random();
int randomnumber = r.nextInt(max - min + 1) + min;

String barcodecods = String.valueOf(randomnumber);

gen.generateBarcode(canvas, barcodecods);
canvas.finish();
}

private static Configuration buildCfg(String type) {
DefaultConfiguration cfg = new DefaultConfiguration("barcode");

//Bar code type
DefaultConfiguration child = new DefaultConfiguration(type);
  cfg.addChild(child);

  //Human readable text position
  DefaultConfiguration attr = new DefaultConfiguration("human-readable");
  DefaultConfiguration subAttr = new DefaultConfiguration("placement");
    subAttr.setValue("bottom");
    attr.addChild(subAttr);

    child.addChild(attr);
return cfg;
}
}

但是当我将用于随机代码的字符串值替换为特定的 8 位数字时,程序运行正常。我应该怎么办?我哪里做错了?有没有其他方法可以为 ean-8 条形码生成生成随机 8 位数字?

最佳答案

条形码不仅仅是简单的数字。整个数字包含一个校验位,它是通过算术过程从其他数字生成的。因此,并非所有数字都是有效的条形码。

不同的条形码使用不同的校验位算法。您需要找出您正在使用的库期望使用哪种算法,然后生成满足此要求的条形码。

因此,例如,如果条形码是 8 位数字,您将生成随机的 7 位数字并附加正确计算的第 8 位数字以制作有效条形码。

注意:校验位是奇偶校验位的十进制等价物。在大多数情况下,它允许软件检测代码是否被错误读取。它并不完美,因为有些错误会产生相同的校验位,但它大大降低了误读的可能性。

关于java - 如何使用 barcode4j 生成随机条形码代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491231/

相关文章:

postgresql - 如何使用来自 T2 的随机重复行将较大的表 T1 连接到较小的 T2

Python - 从列表中选择随机对象

java - 如何在 Java 中生成有效的 EAN13 条形码?

java - 如果不返回任何空值,如何编写向 Excel 工作表中的单元格传递值的条件?

java - 在 Eclipse 中重写方法时在运行时从父类(super class)型定义泛型

c# - 如何在 C# - Visual Studio 中随机填充复选框

jasper-reports - 如何使用jasperreports和barcode4j居中对齐条形码

java - JasperReports 条码 Code128 (Barcode4J) : PNG differs from PDF

java - LinkedHashMap<String,Object>.clone();

java - 如何修复安装 maven jar 插件依赖项时出现的错误?