# tyidcard-npm-sdk

## 身份证阅读器和指纹识别工具包

兼容 Windows 32 位和 64 位系统，支持大部分身份证阅读器。  
开发包由广东东信智能科技有限公司提供。

[公安部身份证阅读器模块SAM通讯协议](https://blog.csdn.net/zhangbijun1230/article/details/85242964)

## 安装

```bash
npm install @gdty/tyidcard-npm-sdk
```

## 使用示例

```javascript
// 加载身份证阅读器 DLL
Sdtapi.load('D:\\IdeaProjects\\tyidcard-npm-sdk\\sdtapi_x64.dll');

// 打开端口
let res = Sdtapi.SDT_OpenPort();
if (Constant.RESULT.OK != res) {
    console.error("打开端口......失败");
    return;
}

// 开始寻找身份证卡
res = Sdtapi.SDT_StartFindIDCard();
if (Constant.RESULT.FIND_SUCCESS != res) {
    console.error("正在找卡......失败");
    return;
} else {
    console.log("找卡成功");
}

// 选择身份证卡
res = Sdtapi.SDT_SelectIDCard();
if (Constant.RESULT.OK != res) {
    console.error("正在选卡......失败");
    return;
}

// 读取身份证基本信息
res = Sdtapi.SDT_ReadBaseFPMsg();
if (Constant.RESULT.OK != res.res) {
    res = Sdtapi.SDT_ReadBaseMsg();
    if (Constant.RESULT.OK != res.res) {
        console.error("正在读取基本信息......失败");
        return;
    }
}

console.log(res);

// 解压照片信息
DllFile.load('D:\\IdeaProjects\\tyidcard-npm-sdk\\DLL_File.dll');
let packres = DllFile.unpack(res.photomsg, 1);
console.log(packres);

// 提取指纹信息
let fp = FpUtils.getFp(res.fpmsg);
console.log('----------------------------------');
console.log(fp);

// 加载指纹识别 DLL
Fprapi.load('D:\\IdeaProjects\\tyidcard-npm-sdk\\ID_Fpr.dll');
FprCapapi.load('D:\\IdeaProjects\\tyidcard-npm-sdk\\ID_FprCap.dll');

// 初始化指纹采集
let cpres = FprCapapi.LIVESCAN_Init();
console.log('LIVESCAN_Init:' + cpres);

// 开始采集指纹
cpres = FprCapapi.LIVESCAN_BeginCapture(0);
console.log('LIVESCAN_BeginCapture:' + cpres);

// 获取原始指纹数据
let ckpres = FprCapapi.LIVESCAN_GetFPRawData(0);
console.log(ckpres);

// 获取指纹图像数据
console.log('---------------------------------------');
let cbpres = FprCapapi.LIVESCAN_GetFPBmpData(0);
console.log(cbpres);

// 结束采集
cpres = FprCapapi.LIVESCAN_EndCapture(0);
console.log('LIVESCAN_EndCapture:' + cpres);

// 获取指纹模块版本
let fpres = Fprapi.FP_GetVersion();
console.log('FP_GetVersion:' + fpres);

// 初始化指纹识别
fpres = Fprapi.FP_Begin();
console.log('FP_Begin:' + fpres);

// 指纹匹配
fpres = Fprapi.FP_ImageMatch(ckpres.msg, fp.second);
console.log('FP_ImageMatch:' + fpres.res);
```

## 主要模块

- **Sdtapi**: 身份证阅读器接口，用于打开端口、查找和选择身份证卡、读取身份证信息。
- **Fprapi**: 指纹识别接口，用于获取指纹模块版本、初始化指纹识别、进行指纹匹配。
- **FprCapapi**: 指纹采集接口，用于初始化采集、开始和结束采集、获取指纹数据。
- **DllFile**: 用于加载 DLL 文件并解压身份证照片信息。
- **FpUtils**: 工具类，用于提取指纹信息。
- **Constant**: 常量定义，如端口状态、结果代码等。

## 注意事项

- 确保正确加载所需的 DLL 文件。
- 身份证阅读器和指纹识别模块需要物理连接并正常工作。
- 根据系统架构（x86/x64）选择合适的 DLL 文件。

## 许可证

请参考项目中的 LICENSE 文件。