parse-myudi
Version:
218 lines (217 loc) • 6.93 kB
JavaScript
function R(u) {
let l = 0;
const r = (a) => {
l = a, u.innerHTML = `count is ${l}`;
};
u.addEventListener("click", () => r(++l)), r(0);
}
const y = "(01)", E = "(10)", w = "(17)", M = "(11)", T = "(21)";
function $(u) {
let l = !1, r = !1;
const a = {}, p = {}, n = {}, b = u.substring(0, 4);
let s = u, h = !1;
const g = !s.includes("(") && !s.includes(")");
if (b.includes("MA") ? (r = !0, n.IAC = "MA") : (r = !1, n.IAC = "GS1"), r)
a.UDI_MA_CODE_RESULT = m(s);
else {
if (s.includes("") || g) {
const e = [];
let o = "";
if (s.includes("")) {
const f = s.split("");
for (let t = 0; t < f.length; t++)
t !== f.length - 1 ? f[t].substring(0, 2) === "01" && f[t].length > 14 ? (e.push(
"(" + f[t].substring(0, 2) + ")" + f[t].substring(2, 16)
), f[t].length > 18 && e.push(
"(" + f[t].substring(16, 18) + ")" + f[t].substring(18)
)) : e.push(
"(" + f[t].substring(0, 2) + ")" + f[t].substring(2)
) : o = f[t];
} else
o = s;
s = e.join("") + D(o), h = !0;
}
const i = /\((\d+)\)([^(]*)/g, d = s.matchAll(i), c = Array.from(d, (e) => {
const o = e[1], I = e[2];
return `(${o})${I}`;
}), O = [];
if (c.length > 0) {
for (let e = 0; e < c.length; e++)
if (c[e].includes(y))
n.DI = c[e].replace(y, ""), l = !0;
else if (c[e].includes(M))
n.MFG = c[e].replace(M, ""), l = !0;
else if (c[e].includes(w)) {
const o = c[e].replace(w, ""), I = s.indexOf(o) + o.length + 2;
if (o.length > 6) {
n.EXP = o.substring(0, 6);
const f = "(" + o.substring(6, 8) + ")";
if (f === E) {
n.LOT = o.substring(8);
const t = s.indexOf(o.substring(8));
s = s.substring(0, t) + E + o.substring(8), h = !0;
} else if (f === M) {
const t = o.substring(8);
if (t.length > 6) {
h = !0, n.MFG = t.substring(0, 6);
const x = s.indexOf(t.substring(0, 6));
if (s = s.substring(0, x - 2) + M + t.substring(0, 6) + s.substring(x + 6), t.length > 6 && "(" + t.substring(6, 8) + ")" === E) {
n.LOT = t.substring(8);
const S = s.indexOf(t.substring(8));
s = s.substring(0, S - 2) + E + t.substring(8) + s.substring(I);
}
} else
n.MFG = t;
}
} else
n.EXP = o;
l = !0;
} else if (c[e].includes(E)) {
n.LOT = c[e].replace(E, "");
const o = C(n, s);
o && (s = o, h = !0), l = !0;
} else c[e].includes(T) ? (n.SN = c[e].replace(T, ""), l = !0) : (l = !0, O.push(c[e]));
if (O.length > 0 && (n.OTHER = O.join("")), h) {
const e = u.replace(/\u001D/g, "").substring(3);
n.ABNORMAL_CODE = "1", n.HRI = e;
} else
n.HRI = s;
n.HRI_RESULT = s;
}
l ? (p.UI = JSON.stringify(n), a.UDI_GS1_CODE_RESULT = p) : a.BAR_CODE_RESULT = s;
}
return a;
}
function m(u) {
let l = u.split("."), r = l[0], a = l.slice(0, 5).join("."), p = null, n = null, b = null, s = null;
for (let g = 5; g < l.length; g++) {
let i = l[g];
i[0] === "S" ? p = i.substring(1) : i[0] === "M" ? n = i.substring(1) : i[0] === "L" ? b = i.substring(1) : i[0] === "E" && (s = i.substring(1));
}
return JSON.stringify({
UI: {
LOT: b,
DI: a,
IAC: r,
SN: p,
EXP: s,
HRI: u,
MFG: n
}
});
}
function C(u, l) {
try {
const r = u.LOT;
if (r && r.includes("17")) {
const a = r.substring(r.indexOf("17") + 2);
if (a.length === 6 && !u.hasOwnProperty("EXP")) {
u.EXP = a, u.LOT = r.substring(0, r.indexOf("17"));
const p = l.indexOf(a), n = l.substring(p - 2, p + 6);
if (!n.includes("(") && !n.includes(")")) {
const b = l.replace(n, "(17)" + a);
return console.debug("scanner parse replace result=", b), b;
}
}
}
} catch {
return "";
}
return "";
}
function D(u) {
const l = /* @__PURE__ */ new Map(), r = [], a = {
10: -1,
// 批号 (可变长度)
21: -1,
// 序列号 (可变长度)
20: -1,
// 序列号 (可变长度)
240: -1,
// 其它序列号 (可变长度)
91: -1
// 其它序列号 (可变长度)
}, p = {
"01": 14,
// 厂商编号 (固定14位)
17: 6,
// 有效期 (固定6位)
11: 6,
// 生产日期 (固定6位)
10: -1,
// 批号 (可变长度)
21: -1,
// 序列号 (可变长度)
20: -1,
// 序列号 (可变长度)
240: -1,
// 其它序列号 (可变长度)
91: -1
// 其它序列号 (可变长度)
}, n = {
10: 20,
21: 20,
240: 20,
91: 20
}, b = /* @__PURE__ */ new Map();
let s = 0;
const h = u.length;
for (; s < h; ) {
let g = !1;
for (let i = 2; i <= 4; i++) {
if (s + i > h) continue;
const d = u.substring(s, s + i);
if (p.hasOwnProperty(d)) {
const c = p[d], O = d, e = s + i;
if (c !== -1) {
if (e + c <= h) {
const o = u.substring(e, e + c);
b.set(O, o), s = e + c, g = !0;
break;
}
} else {
const o = n[O] || 20;
let I = 0, f = !1;
for (let L = 0; L <= o && !(e + L > h); L++) {
const P = e + L;
for (let S = 2; S <= 4; S++) {
if (P + S > h) continue;
const A = u.substring(P, P + S);
if (a.hasOwnProperty(A)) {
if (b.hasOwnProperty(A) || A === "91" && !b.hasOwnProperty("10") && !b.hasOwnProperty("21") || L <= 4)
continue;
I = L, f = !0;
break;
}
}
if (f) break;
}
let t = f ? I : Math.min(o, h - e), x = "";
t > 0 && (a.hasOwnProperty(O) && h - (e + t) > 6 ? x = u.substring(e, e + t) : x = u.substring(e)), !b.hasOwnProperty(O) && x.length > 4 && b.set(O, x), s = e + t, g = !0;
break;
}
}
}
if (!g) break;
}
return b.forEach(function(g, i) {
if (!l.hasOwnProperty(i))
if (l.set(i, g), i === "10")
l.hasOwnProperty("21") || r.push(`(${i})${g}`);
else if (i === "20")
if (b.hasOwnProperty("17"))
r.push(`(${i})${g}`);
else {
const d = g.indexOf("17");
r.push(`(${i})${g.substring(0, d)}`);
const c = g.substring(d + 2, d + 8);
!c.includes("(") && !c.includes(")") && r.push(`(17)${c}`);
}
else
r.push(`(${i})${g}`);
}), console.log("result=" + r.toString()), r.length === 0 ? u : r.join("");
}
export {
$ as parseUDI,
R as setupCounter
};