UNPKG

parse-myudi

Version:

218 lines (217 loc) 6.93 kB
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 };