UNPKG

@waiting/idcard-reader-bp8903

Version:
13 lines (11 loc) 3.78 kB
/** * @waiting/idcard-reader-bp8903 * 南天 BP8903 二代机具读卡 * * @version 2.3.2 * @author waiting * @license MIT * @link https://github.com/waitingsong/node-idcard-reader-bp8903#readme */ import{join as e,tmpdir as t,dirname as r,normalize as o,isFileExists as i,fileExists as n}from"@waiting/shared-core";import{DTypes as a}from"win32-def";import{parseDeviceOpts as s,parseCompositeOpts as p,validateDllFile as c,testWrite as m,initialIDData as d,composite as f,initialDataBase as u,formatBaseData as g}from"@waiting/idcard-reader-base";export{initialCompositeOpts,initialOpts,nationMap}from"@waiting/idcard-reader-base";import{info as l}from"@waiting/log";import{Library as O}from"ffi";import{of as I}from"rxjs";import{timeout as b,retry as h,map as P,delay as v,tap as T,mergeMap as C,catchError as w}from"rxjs/operators";import{decode as N}from"iconv-lite";const D={appDir:"",tmpDir:e(t(),"idcard-reader")},$={OpenCom:[a.INT32,[a.INT32,a.POINT,a.INT32,a.INT32]],CloseCom:[a.INT32,[]],IDCard_GetInformation:[a.INT32,[a.INT32,a.INT32,a.POINT,a.INT32,a.POINT,a.POINT,a.POINT]]};function x(e,t){if(e&&e.inUse)return e.deviceOpts.debug&&l("Cautiton: connectDevice() device in use"),0;const r=e.apib.OpenCom(t,Buffer.from(""),9600,1);return e.deviceOpts.debug&&l(`open com ret: ${r}`),0===r?t:0}function B(e){const t=e.apib.CloseCom();return e.deviceOpts.debug&&l(`disconnectDevice at port: ${e.openPort}, ret: ${t} `),e.inUse=!1,!0}function _(e,t,r){const o=[];if(e.port>0){const i=j(e.port,e,t,r);i.openPort>0&&o.push(i)}else for(let i=1;i<=16;i++){const n=j(i,e,t,r);if(n.openPort>0&&(o.push(n),!e.searchAll))break}return o}function j(e,t,r,o){const i={apib:o,deviceOpts:t,compositeOpts:r,inUse:!1,openPort:0},n=x(i,e);return n>0&&(i.inUse=!0,i.openPort=n,t.debug&&l(`Found device at serial/usb port: ${n}`),B(i)),i}function y(e){const t=r(e.deviceOpts.dllTxt);process.env.PATH=`${process.env.PATH};${t}`;const i=Buffer.alloc(10240),n=t.replace(/\\/g,"/")+"/",a=o(e.deviceOpts.imgSaveDir+"/").replace(/\\/g,"/");e.deviceOpts.debug&&(l("starting reading readCard ret"),l("IDCard_GetInformation() src path:"+n),l("IDCard_GetInformation() target path:"+a));const s=e.apib.IDCard_GetInformation(e.openPort,9600,Buffer.from(""),3,i,Buffer.from(n),Buffer.from(a)),p=N(i,"gbk");return e.deviceOpts.debug&&(l(`readDataBase code: ${s}`),l(`readDataBase bufLen: ${i.byteLength}`),l(`readDataBase ret: ${p}`)),p.replace(/\0/g,"")}async function G(e){const t=s(e),r=p(e),{debug:o}=t;if(o&&(l(r),l(t)),await c(t.dllTxt),t.dllImage&&r.useComposite&&!await i(t.dllImage))throw new Error("File not exists: "+t.dllImage);await m(t.imgSaveDir);const n=O(t.dllTxt,$),a=_(t,r,n);if(a&&a.length)return a;throw new Error("未找到读卡设备")}function U(e){if(e.openPort){try{B(e)}catch(e){throw e}const t=I(y(e)).pipe(b(2e3)),r=t.pipe(h(e.deviceOpts.findCardRetryTimes),P(t=>{const r=A(t),o=e.compositeOpts.useComposite?E(e.deviceOpts.imgSaveDir,r.idc):"",i=Object.assign({},d,{base:r,imagePath:o});return i})),o=r.pipe(v(e.compositeOpts.useComposite?300:0),T(()=>{B(e)}),C(e=>n(e.imagePath).pipe(P(t=>(e.imagePath=t,e)))),C(t=>e.compositeOpts.useComposite&&t.imagePath?f(t.imagePath,t.base,e.compositeOpts).pipe(P(e=>(t.compositePath=e,t))):I(t)),b(2e4),w(t=>{throw B(e),t}));return o.toPromise()}throw new Error("设备端口未指定")}function A(e){const t=Object.assign({},u);if(!e||!e.length)return t;const r=e.split("|");return 9===r.length&&(t.name=r[0].trim(),t.idc=r[1],t.genderName=r[2],t.nationName=r[3],t.birth=r[4],t.address=r[5].trim(),t.regorg=r[6].trim(),t.startdate=r[7],t.enddate=r[8]),g(t)}function E(t,r){const o=e(t,`${r}.bmp`);return o}D.appDir=__dirname+"/..";export{G as init,U as read,E as genAvatarPath}; //# sourceMappingURL=index.esm.min.js.map