gpt4 book ai didi

java - 解码 EAN 128

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:54 27 4
gpt4 key购买 nike

有很多组件可以创建/解析条形码图像,但我无法找到一个库来解析 EAN 128 条形码字符串并给我一个简单的 java-pojo 对象,如果它们可以从中获取 EAN128 组包含在条形码中。

示例伪代码:

EAN128Pojo pojo = EAN128Pojo.parse(some string got from scanner);
Date dueDate = pojo.getDueDate();

Object dueDate = pojo.get(12 /*application identifier for due date*/);

是否有任何库能够做到这一点?

干杯

最佳答案

我不知道,谷歌代码搜索也不知道:http://www.google.com/codesearch?q=getAdditionalProductIdentification

无论如何,自己编写并不难。这个花了我不到一个小时的时间:

package so5685964;

import java.util.Map;

import org.joda.time.DateMidnight;

import com.google.common.collect.Maps;

public class GS1Code128Data {

/** Maps the AI to the corresponding data from the barcode. */
private final Map<String, String> data = Maps.newHashMap();

private static final Map<String, AII> aiinfo = Maps.newHashMap();

static class AII {
final int minLength;
final int maxLength;

public AII(String id, int minLength, int maxLength) {
this.minLength = minLength;
this.maxLength = maxLength;
}
}

private static void ai(String id, int minLength, int maxLength) {
aiinfo.put(id, new AII(id, minLength, maxLength));
}

private static void ai(String id, int length) {
aiinfo.put(id, new AII(id, length, length));
}

static {
ai("00", 18, 18);
ai("01", 14);
ai("02", 14);
ai("10", 1, 20);
ai("11", 6);
ai("12", 6);
// TODO: continue according to http://en.wikipedia.org/wiki/GS1-128
}

/**
* Decodes a Unicode string from a Code128-like encoding.
*
* @param fnc1 The character that represents FNC1.
*/
public GS1Code128Data(String s, char fnc1) {
StringBuilder ai = new StringBuilder();
int index = 0;
while (index < s.length()) {
ai.append(s.charAt(index++));
AII info = aiinfo.get(ai.toString());
if (info != null) {
StringBuilder value = new StringBuilder();
for (int i = 0; i < info.maxLength && index < s.length(); i++) {
char c = s.charAt(index++);
if (c == fnc1) {
break;
}
value.append(c);
}
if (value.length() < info.minLength) {
throw new IllegalArgumentException("Short field for AI \"" + ai + "\": \"" + value + "\".");
}
data.put(ai.toString(), value.toString());
ai.setLength(0);
}
}
if (ai.length() > 0) {
throw new IllegalArgumentException("Unknown AI \"" + ai + "\".");
}
}

private static DateMidnight asDate(String s) {
if (s == null) {
return null;
}
String century = s.compareTo("500000") < 0 ? "20" : "19";
return new DateMidnight(century + s);
}

public DateMidnight getDueDate() {
return asDate(data.get("12"));
}
}

还有一些演示代码:

package so5685964;

public class BarcodeDemo {

public static void main(String[] args) {
String barcode = "12110416";

GS1Code128Data data = new GS1Code128Data(barcode, '\f');

System.out.println(data.getDueDate());
}
}

当您假设您的输入已经是一个String 时,请注意编码问题。 FNC1 代码没有相应的 Unicode 代码点,因此必须以其他方式进行编码。

关于java - 解码 EAN 128,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5685964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com