parse-myudi
Version:
2 lines (1 loc) • 4.34 kB
JavaScript
(function(I,P){typeof exports=="object"&&typeof module<"u"?P(exports):typeof define=="function"&&define.amd?define(["exports"],P):(I=typeof globalThis<"u"?globalThis:I||self,P(I.Counter={}))})(this,(function(I){"use strict";function P(u){let l=0;const i=a=>{l=a,u.innerHTML=`count is ${l}`};u.addEventListener("click",()=>i(++l)),i(0)}const m="(01)",y="(10)",C="(17)",M="(11)",w="(21)";function D(u){let l=!1,i=!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")?(i=!0,n.IAC="MA"):(i=!1,n.IAC="GS1"),i)a.UDI_MA_CODE_RESULT=R(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("")+U(o),h=!0}const r=/\((\d+)\)([^(]*)/g,d=s.matchAll(r),c=Array.from(d,e=>{const o=e[1],S=e[2];return`(${o})${S}`}),O=[];if(c.length>0){for(let e=0;e<c.length;e++)if(c[e].includes(m))n.DI=c[e].replace(m,""),l=!0;else if(c[e].includes(M))n.MFG=c[e].replace(M,""),l=!0;else if(c[e].includes(C)){const o=c[e].replace(C,""),S=s.indexOf(o)+o.length+2;if(o.length>6){n.EXP=o.substring(0,6);const f="("+o.substring(6,8)+")";if(f===y){n.LOT=o.substring(8);const t=s.indexOf(o.substring(8));s=s.substring(0,t)+y+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)+")"===y){n.LOT=t.substring(8);const E=s.indexOf(t.substring(8));s=s.substring(0,E-2)+y+t.substring(8)+s.substring(S)}}else n.MFG=t}}else n.EXP=o;l=!0}else if(c[e].includes(y)){n.LOT=c[e].replace(y,"");const o=$(n,s);o&&(s=o,h=!0),l=!0}else c[e].includes(w)?(n.SN=c[e].replace(w,""),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 R(u){let l=u.split("."),i=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 r=l[g];r[0]==="S"?p=r.substring(1):r[0]==="M"?n=r.substring(1):r[0]==="L"?b=r.substring(1):r[0]==="E"&&(s=r.substring(1))}return JSON.stringify({UI:{LOT:b,DI:a,IAC:i,SN:p,EXP:s,HRI:u,MFG:n}})}function $(u,l){try{const i=u.LOT;if(i&&i.includes("17")){const a=i.substring(i.indexOf("17")+2);if(a.length===6&&!u.hasOwnProperty("EXP")){u.EXP=a,u.LOT=i.substring(0,i.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 U(u){const l=new Map,i=[],a={10:-1,21:-1,20:-1,240:-1,91:-1},p={"01":14,17:6,11:6,10:-1,21:-1,20:-1,240:-1,91:-1},n={10:20,21:20,240:20,91:20},b=new Map;let s=0;const h=u.length;for(;s<h;){let g=!1;for(let r=2;r<=4;r++){if(s+r>h)continue;const d=u.substring(s,s+r);if(p.hasOwnProperty(d)){const c=p[d],O=d,e=s+r;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 S=0,f=!1;for(let L=0;L<=o&&!(e+L>h);L++){const A=e+L;for(let E=2;E<=4;E++){if(A+E>h)continue;const T=u.substring(A,A+E);if(a.hasOwnProperty(T)){if(b.hasOwnProperty(T)||T==="91"&&!b.hasOwnProperty("10")&&!b.hasOwnProperty("21")||L<=4)continue;S=L,f=!0;break}}if(f)break}let t=f?S: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,r){if(!l.hasOwnProperty(r))if(l.set(r,g),r==="10")l.hasOwnProperty("21")||i.push(`(${r})${g}`);else if(r==="20")if(b.hasOwnProperty("17"))i.push(`(${r})${g}`);else{const d=g.indexOf("17");i.push(`(${r})${g.substring(0,d)}`);const c=g.substring(d+2,d+8);!c.includes("(")&&!c.includes(")")&&i.push(`(17)${c}`)}else i.push(`(${r})${g}`)}),console.log("result="+i.toString()),i.length===0?u:i.join("")}I.parseUDI=D,I.setupCounter=P,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})}));