SDT88-FR身份证阅读器嵌入式安全控制模块接口API使用手册

SDT88-FR身份证阅读器嵌入式安全控制模块
SDT88-FR身份证阅读器嵌入式安全控制模块
SDT88-FR身份证阅读器嵌入式安全控制模块
SDT88-FR身份证阅读器嵌入式安全控制模块
SDT88-FR身份证阅读器嵌入式安全控制模块
SDT88-FR身份证阅读器嵌入式安全控制模块

嵌入式身份证读卡器安全控制模块是带有射频通信接口的第四代居民身份证安全验证控制模块,符合《GA/T 467-2019居民身份证验证安全控制模块接口技术规范》,射频接口支持ISO/IEC 14443 Type A/B。

嵌入式身份证读卡器又叫集成式嵌入式身份证读卡器模块,主要适用于手机、平板、手持机等小型设备嵌入式使用,支持个性化定制,提供多种接口,支持二次开发。

射频通信接口身份证接验

性能参数:

身份证核验接口:USB 2.0接口和UART串口

读卡电流:60~150mA

休眠电流:10uA

工作温度:-40~65℃

射频通信接口:

A.支持14443 TypeA/B通信

B.SPI从接口:支持Mokde0和Mode3模式,支持最高速率10MHz

电气规格

工作电压:3.0~3.6V

工作电流:40mA

封装

BGA72,尺寸:长宽高12x12x1.91mm

SDT88-FR身份证阅读器嵌入式安全控制模块居民身份证嵌入式安全控制模块接
1. 前言 
本手册是居民身份证嵌入式安全控制模块(以下有时以 SAM_A 指代)接口 API 的使用
说明,适用于 Windows 下版本号为 4.0.0.0 的 API 动态库(sdtapi.dll)和 Linux 下版本号为
4.0.0 的 API 动态库(libsdtapi.so)。
2. 系统要求 
使用本动态库的 PC 机,必须满足下列条件:
 Windows 98,Windows 2000 Pro,Windows 2000 Server,WindowsXP,Windows7,
Windows10,linux(对应具体操作系统环境);
 至少一个空闲普通串口或 USB 口。
3. API 列表 
API 分为三类,在下表中列出。
序号 函数名 功能描述 
调用层
级号 
端口类API 
1. SDT_GetCOMBaud 查看 SAM_A 串口当前波特率 1
2. SDT_SetCOMBaud 设置业务终端与 SAM_A 串口的波特率 1
3. SDT_OpenPort 打开串口/USB 口 1
4. SDT_ClosePort 关闭串口/USB 口 2
SAM类API
5. SDT_ResetSAM 对 SAM_A 复位 1
6. SDT_SetMaxRFByte 设置射频适配器一帧通信数据的最大字
节数
1
7. SDT_GetSAMStatus 对 SAM_A 进行状态检测 1
8. SDT_GetSAMID 读取 SAM_A 的编号,输出为十六进制数

1
9. SDT_GetSAMIDToStr 读取 SAM_A 的编号,输出为字符串 1
10. SDT_SetRFFieldState 设置射频场开关状态 1
11. SDT_GetRFFieldState 读取射频场开关状态 1
12. SDT_SetRFModParm 设置射频调制参数 1
13. SDT_GetRFModParm 读取射频调制参数 1
14. SDT_SetSOFParm 设置射频帧 SOF 控制参数 1
15. SDT_GetSOFParm 读取射频帧 SOF 控制参数 1
16. SDT_SetEOFParm 设置射频帧 EOF 控制参数 1
17. SDT_GetEOFParm 读取射频帧 EOF 控制参数 1
18. SDT_SetEGTParm 设置射频帧 EGT 控制参数 1
19. SDT_GetEGTParm 读取射频帧 EGT 控制参数 1
20. SDT_SetTestOutPinParm 设置测试输出管脚参数 1
21. SDT_GetTestOutPinParm 读取测试输出管脚参数 1
22. SDT_SetRecvConfigParm 设置接收配置参数 1
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
2
23. SDT_GetRecvConfigParm 读取接收配置参数 1
身份证卡类API
24. SDT_StartFindIDCard 寻找居民身份证 1
25. SDT_SelectIDCard 选取居民身份证 2
26. SDT_ReadBaseMsg 读取居民身份证机读文字信息和相片信
息相片
3
27. SDT_ReadBaseMsgToFile 读取居民身份证机读文字信息和相片信
息,并将其存入用户指定文件
3
28. SDT_ReadBaseFPMsg 读取居民身份证机读文字信息、相片信
息和指纹信息
3
29. SDT_ReadBaseFPMsgToFile 读取居民身份证机读文字信息、相片信
息和指纹信息,并将其存入用户指定文

3
30. SDT_ReadNewAppMsg 读取追加地址信息 3
4. API 详细说明 
4.1端口类 API
4.1.1 SDT_GetCOMBaud 
查看 SAM_A 串口当前波特率(该函数只用于 SAM_A 采用串口的情形,如果采用 USB 接口
则不支持该 API)。 
int SDT_GetCOMBaud (
int iPort,
unsigned int * puiBaudRate
);
参数说明: 
iPort
[in] 整数,表示端口号。此处端口号必须为 1~16,表示串口。
puiBaudRate
[out] 无符号整数指针,指向普通串口当前波特率, 默认情况下为 115200bps。
返回值: 
0x90 成功。
0x01 端口打开失败/端口号不合法。
0x05 无法获得该 SAM_A 的波特率,该 SAM_A 串口不可用。
注:[in]表示该参数为输入参数,[out]表示该参数为输出参数,下同。
4.1.2 SDT_SetCOMBaud 
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
3
设置业务终端及 SAM_A 的串口的波特率(该函数只用于 SAM_A 采用串口的情形,如果采
用 USB 接口则不支持本函数)。 
int SDT_SetCOMBaud (
int iPort,
 unsigned int uiCurrBaud,
unsigned int uiSetBaud
);
参数说明: 
iPort
[in] 整数,表示端口号。此处端口号必须为 1~16,表示串口。
uiCurrBaud
[in] 无符号整数,调用该 API 前已设置的业务终端与 SAM_A 通信的波特率
(SAM_A 出厂时默认值为 115200bps)。业务终端以当前使用的波特率与 SAM_A
通信,发出设置 SAM_A 新波特率的命令。uiCurrBaud 的合法取值为下列数值之
一:115200、57600、38400、19200、9600。如果 uiCurrBaud 数值不是这些值
之一,函数返回 0x21;如果已设置的波特率为合法取值之一,但与 uiCurrBaud
不一致, 则函数返回 0x02,表示设置不成功。
uiSetBaud
[in] 无符号整数,将要设置的 SAM_A 与业务终端通信波特率。uiSetBaud 只
能取下列值之一:115200、57600、38400、19200、9600。如果输入 uiSetBaud
参数不是这些数值之一,函数返回 0x21,设置不成功,保持原来的波特率不变。
返回值: 
0x90 成功。
0x01 端口打开失败/端口号不合法。
0x02 超时,设置不成功。
0x21 uiCurrBaud 、uiSetBaud 输入参数数值错误。
4.1.3 SDT_OpenPort 
打开串口/USB 口。 
int SDT_OpenPort(
int iPort
);
参数说明: 
iPort
[in] 整数,表示端口号。串口和 USB 都只支持 16 个,分别为 1~16(十进制)
为串口,1001~1016(十进制)为 USB 口。
串口 1~16 例如:
1:串口 1(COM1)
2:串口 2(COM2)
USB 口 1001~1016 例如:
1001:USB1
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
4
1002:USB2
返回值: 
0x90 打开端口成功。
0x01 打开端口失败/端口号不合法。
4.1.4 SDT_ClosePort 
关闭串口/USB 口。 
int SDT_ClosePort (
int iPort
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
返回值: 
0x90 关闭端口成功。
0x01 端口号不合法。
4.2SAM 类 API
4.2.1 SDT_ResetSAM 
对 SAM_A 复位。
int SDT_ResetSAM (
int iPort,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号,参见 SDT_OpenPort。
iIfOpen
[in] 整数,0 表示不在该函数内部打开和关闭串口,此时应确保之前调用了
SDT_OpenPort 打开端口,并且应在不需要与端口通信时,调用 SDT_ClosePort
关闭端口;非 0 表示在 API 函数内部包含了打开端口和关闭端口函数,之前不
需要调用 SDT_OpenPort,也不用再调用 SDT_ClosePort。
返回值: 
0x90 成功。
其它 失败(具体含义参见 6 函数返回码表)。
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
5
4.2.2 SDT_SetMaxRFByte 
设置射频适配器一帧通信数据的最大字节数。 
int SDT_SetMaxRFByte (
int iPort,
unsigned char ucByte,
int bIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
ucByte
[in] 无符号字符,24~255,表示射频适配器一帧通信数据的最大字节数。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其它 失败(具体含义参见 6 函数返回码表)。
4.2.3 SDT_GetSAMStatus 
对 SAM_A 进行状态检测。
int SDT_GetSAMStatus (
int iPort,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 SAM_A 正常。
0x60 自检失败,不能接收命令。
其它 失败(具体含义参见 6 函数返回码表)。
4.2.4 SDT_GetSAMID 
读取 SAM_A 的编号,输出为十六进制数值。
int SDT_GetSAMID (
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
6
int iPort,
unsigned char * pucSAMID,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucSAMID
[out] 无符号字符串指针,SAM_A 编号,16 字节。该指针指向的存储空间由调
用者分配。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其它 失败(具体含义参见 6 函数返回码表)。
4.2.5 SDT_GetSAMIDToStr 
读取 SAM_A 的编号,输出为字符串。
int SDT_GetSAMIDToStr (
int iPort,
char * pcSAMID,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pcSAMID
[out] 字符串指针,SAM_A 编号。该指针指向的存储空间由调用者分配,不得
小于 40 字节。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其它 失败(具体含义参见 6 函数返回码表)。
4.2.6 SDT_SetRFFieldState 
 
设置射频场开关状态。
int SDT_SetRFFieldState(
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
7
int iPort,
unsigned char ucState, 
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
ucState
 [in] 无符号字符。0x00:关闭发射场,0x01:打开发射场。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
4.2.7 SDT_GetRFFieldState 
读取射频场开关状态。
int SDT_GetRFFieldState(
int iPort,
unsigned char * pucState, 
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucState
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。0x00:发射
场关闭状态,0x01:发射场打开状态。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
4.2.8 SDT_SetRFModParm 
 
设置射频调制参数。
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
8
int SDT_SetRFModParm(
int iPort,
unsigned char ucCWSI,
unsigned char ucMODSI,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
ucCWSI
 [in] 无符号字符。0-63,表示载波信号强度值。
ucMODSI
 [in] 无符号字符。0-63,表示调制信号强度值。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
4.2.9 SDT_GetRFModParm 
 
读取射频调制参数。
int SDT_GetRFModParm(
int iPort,
unsigned char * pucCWSI,
unsigned char * pucMODSI,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucCWSI
 [out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。载波信号强
度值,默认为 0x3F。
pucMODSI
 [out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。调制信号强
度值,默认为 0x18。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
9
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
4.2.10 SDT_SetSOFParm 
设置射频帧 SOF 控制参数。
int SDT_SetSOFParm( 
int iPort, 
unsigned char ucSWithSOF, 
unsigned char ucSSOFHW, 
unsigned char ucSSOFLW, 
unsigned char ucRWithSOF, 
unsigned char ucRSOFHWMax, 
unsigned char ucRSOFHWMin, 
unsigned char ucRSOFLWMax, 
int iIfOpen 
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
ucSWithSOF
 [in] 无符号字符,1 字节。发送帧是否带 SOF 控制:0x00,带 SOF 控制,需
配置 SOF 发送参数,0x01,不带 SOF 控制。
ucSSOFHW
 [in] 无符号字符,1 字节。发送 SOF 高电平宽度:取值范围 0~3,默认值为
0,对应实际值 0:2ETU,1:2.25ETU,2:2.5ETU,3:3ETU。
ucSSOFLW
 [in] 无符号字符,1 字节。发送 SOF 低电平宽度:取值范围 0~3,默认值为
0,对应实际值 0:10ETU,1:10.25ETU,2:10.5ETU,3:11ETU。
ucRWithSOF
[in] 无符号字符,1 字节。接收帧是否带 SOF 控制:0x00,带 SOF 控制,需
配置 SOF 接收参数,0x01,不带 SOF 控制。
ucRSOFHWMax
[in] 无符号字符,1 字节。允许接收 SOF 高电平的最大宽度:取值范围 0~3,
默认值为 2,对应实际值 0:3ETU,1:3.5ETU,2:4ETU,3:4.5ETU。
ucRSOFHWMin
[in] 无符号字符,1 字节。允许接收 SOF 高电平的最小宽度:取值范围 0~3,
默认值为 0,对应实际值 0:0.5ETU,1:1ETU,2:1.5ETU,3:2ETU。
ucRSOFLWMax
[in] 无符号字符,1 字节。允许接收 SOF 低电平的最大宽度:取值范围 0~3,
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
10
默认值为 0,对应实际值 0:11ETU,1:11.5ETU,2:12ETU,3:12.5ETU。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
4.2.11 SDT_GetSOFParm 
 
读取射频帧 SOF 控制参数。
int SDT_GetSOFParm( 
int iPort, 
unsigned char * pucSWithSOF, 
unsigned char * pucSSOFHW, 
unsigned char * pucSSOFLW, 
unsigned char * pucRWithSOF, 
unsigned char * pucRSOFHWMax, 
unsigned char * pucRSOFHWMin, 
unsigned char * pucRSOFLWMax, 
int iIfOpen 
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucSWithSOF
 [out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。发送帧是否
带 SOF 控制:0x00,带 SOF 控制,0x01,不带 SOF 控制。
pucSSOFHW
 [out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。发送 SOF
高电平宽度:取值范围 0~3,默认值为 0,对应实际值 0:2ETU,1:2.25ETU,
2:2.5ETU,3:3ETU。
pucSSOFLW
 [out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。发送 SOF
低电平宽度:取值范围 0~3,默认值为 0,对应实际值 0:10ETU,1:10.25ETU,
2:10.5ETU,3:11ETU。
pucRWithSOF
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。接收帧是否
带 SOF 控制:0x00,带 SOF 控制,0x01,不带 SOF 控制。
pucRSOFHWMax
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。允许接收 SOF
高电平的最大宽度:取值范围 0~3, 默认值为 2,对应实际值 0:3ETU,1:
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
11
3.5ETU,2:4ETU,3:4.5ETU。
pucRSOFHWMin
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。允许接收 SOF
高电平的最小宽度:取值范围 0~3, 默认值为 0,对应实际值 0:0.5ETU,1:
1ETU,2:1.5ETU,3:2ETU。
pucRSOFLWMax
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。允许接收 SOF
低电平的最大宽度:取值范围 0~3, 默认值为 0,对应实际值 0:11ETU,1:
11.5ETU,2:12ETU,3:12.5ETU。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
4.2.12 SDT_SetEOFParm 
 
设置射频帧 EOF 控制参数。
int SDT_SetEOFParm( 
int iPort, 
unsigned char ucSWithEOF, 
unsigned char ucSEOFW, 
unsigned char ucRWithEOF, 
unsigned char ucREOFLWMax, 
int iIfOpen 
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
ucSWithEOF
[in] 无符号字符,1 字节。发送帧是否带 EOF 控制:0x00,带 EOF 控制,需
配置发送帧 EOF 参数,0x01,不带 EOF 控制。
ucSEOFW
[in] 无符号字符,1 字节。发送 EOF 宽度:取值范围 0~3,默认值为 0,对
应实际值 0:10ETU,1:10.25ETU,2:10.5ETU,3:11ETU。
ucRWithEOF
[in] 无符号字符,1 字节。接收帧是否带 EOF 控制:0x00,带 EOF 控制,需
配置发送帧 EOF 参数,0x01,不带 EOF 控制。
ucREOFLWMax
[in] 无符号字符,1 字节。允许接收 EOF 低电平的最大宽度:取值范围 0~3,
默认值为 0,对应实际值 0:11ETU,1:11.5ETU,2:12ETU,3:12.5ETU。
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
12
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
4.2.13 SDT_GetEOFParm 
 
读取射频帧 EOF 控制参数。
int SDT_GetEOFParm( 
int iPort, 
unsigned char * pucSWithEOF, 
unsigned char * pucSEOFW, 
unsigned char * pucRWithEOF, 
unsigned char * pucREOFLWMax, 
int iIfOpen 
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucSWithEOF
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。发送帧是否
带 EOF 控制:0x00,带 EOF 控制,0x01,不带 EOF 控制。
pucSEOFW
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。发送 EOF
宽度:取值范围 0~3,默认值为 0,对应实际值 0:10ETU,1:10.25ETU,2:
10.5ETU,3:11ETU。
pucRWithEOF
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。接收帧是否
带 EOF 控制:0x00,带 EOF 控制,0x01,不带 EOF 控制。
pucREOFLWMax
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。允许接收
EOF 低电平的最大宽度:取值范围 0~3,默认值为 0,对应实际值 0:11ETU,
1:11.5ETU,2:12ETU,3:12.5ETU。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
13
4.2.14 SDT_SetEGTParm 
 
设置射频帧 EGT 参数。
int SDT_SetEGTParm( 
int iPort, 
unsigned char ucREGTWMax, 
unsigned char ucSEGTW, 
int iIfOpen 
);
 
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
ucREGTWMax
[in] 无符号字符,1 字节。允许接收 EGT 的最大宽度:取值范围 0~7,默认
值为 0,对应实际值 0:2ETU,1:3ETU,…5:7ETU,6:8ETU,7:9ETU。
ucSEGTW
[in] 无符号字符,1 字节。发送 EGT 宽度:取值范围 0~7,默认值为 0,对
应实际值 0:0ETU,1:1ETU…,5:5ETU,6:6ETU,7:7ETU。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
 
4.2.15 SDT_GetEGTParm 
 
读取射频帧 EGT 参数。
int SDT_GetEGTParm( 
int iPort, 
unsigned char * pucREGTWMax, 
unsigned char * pucSEGTW, 
int iIfOpen 
);
 
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucREGTWMax
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。允许接收
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
14
EGT 的最大宽度:取值范围 0~7,默认值为 0,对应实际值 0:2ETU,1:
3ETU,…5:7ETU,6:8ETU,7:9ETU。
pucSEGTW
[out]无符号字符指针,1 字节,指向的存储空间由调用者分配。发送 EGT 宽
度:取值范围 0~7,默认值为 0,对应实际值 0:0ETU,1:1ETU…,5:5ETU,
6:6ETU,7:7ETU。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。 
4.2.16 SDT_SetTestOutPinParm 
 
设置测试输出管脚参数。
int SDT_SetTestOutPinParm( 
int iPort, 
unsigned char ucEncAUX, 
unsigned char ucMFOUTSig, 
unsigned char ucAUXSig, 
int iIfOpen 
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
ucEncAUX
[in] 无符号字符,1 字节。AUX 使能:0x01,AUX 管脚输出 AUX 测试信号
使能,0x00,AUX 测试信号禁止,默认值为 0x00。
ucMFOUTSig
[in] 无符号字符,1 字节。MFOUT 管脚数字测试信号:取值范围 0~1F,默
认值为 0。
ucAUXSig
[in] 无符号字符,1 字节。AUX 端口的模拟测试信号:取值范围 0~7,默认
值为 0。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
 
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
15
 
4.2.17 SDT_GetTestOutPinParm 
 
读取测试输出管脚参数。
int SDT_GetTestOutPinParm( 
int iPort, 
unsigned char * pucEncAUX, 
unsigned char * pucMFOUTSig, 
unsigned char * pucAUXSig, 
int iIfOpen 
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucEncAUX
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。AUX 使能:
0x01,AUX 管脚输出 AUX 测试信号使能,0x00,AUX 测试信号禁止,默认
值为 0x00。
pucMFOUTSig
[out]无符号字符指针,1 字节,指向的存储空间由调用者分配。MFOUT 管脚
数字测试信号:取值范围 0~1F,默认值为 0。
pucAUXSig
[out]无符号字符指针,1 字节,指向的存储空间由调用者分配。AUX 端口的
模拟测试信号:取值范围 0~7,默认值为 0。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
 
4.2.18 SDT_SetRecvConfigParm 
设置接收配置参数。
int SDT_SetRecvConfigParm( 
int iPort, 
unsigned char ucLagWin, 
unsigned char ucVolGain, 
int iIfOpen 
);
参数说明: 
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
16
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
ucLagWin
[in] 无符号字符,1 字节。比较器迟滞窗口大小:0~7,默认值为 3。
ucVolGain
[in] 无符号字符,1 字节。接收器信号电压增益因素:0~15,默认值为 10,
两级增益放大:Bit0-1:增益放大器 1 的放大倍数,Bit2-3:增益放大器 2 的
放大倍数;放大倍数:00---4 倍,01---15 倍,10---10 倍,11---20 倍。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
4.2.19 SDT_GetRecvConfigParm 
读取接收配置参数。
int SDT_GetRecvConfigParm( 
int iPort, 
unsigned char * pucLagWin, 
unsigned char * pucVolGain, 
int iIfOpen 
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucLagWin
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。比较器迟滞
窗口大小:0~7,默认值为 3。
pucVolGain
[out] 无符号字符指针,1 字节,指向的存储空间由调用者分配。接收器信号
电压增益因素:0~15,默认值为 10,两级增益放大:Bit0-1:增益放大器 1 的
放大倍数,Bit2-3:增益放大器 2 的放大倍数;放大倍数:00---4 倍,01---15
倍,10---10 倍,11---20 倍。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 成功。
其他 失败(具体含义参见 6 函数返回码表)。
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
17
4.3身份证卡类 API
4.3.1 SDT_StartFindIDCard 
寻找居民身份证。
int SDT_StartFindIDCard (
int iPort,
unsigned char * pucManaInfo,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucManaInfo
[out] 无符号字符型指针,4 个字节 0x00。该指针指向的存储空间由调用者分
配。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x9f 找卡成功。
0x80 找卡失败。
4.3.2 SDT_SelectIDCard 
选卡。
int SDT_SelectIDCard (
int iPort,
unsigned char * pucManaMsg,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucManaMsg
[out] 无符号字符型指针,8 个字节 0x00。该指针指向的存储空间由调用者分
配。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
18
0x90 选卡成功。
0x81 选卡失败。
4.3.3 SDT_ReadBaseMsg 
读取居民身份证机读文字信息和相片信息。
int SDT_ReadBaseMsg (
int iPort,
unsigned char * pucCHMsg, 
unsigned int * puiCHMsgLen,
unsigned char * pucPHMsg, 
unsigned int * puiPHMsgLen,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucCHMsg
[out] 无符号字符型指针,指向读到的文字信息,其长度由 puiCHMsgLen 参数
输出。该指针指向的存储空间由调用者分配,不得小于 256 字节。
puiCHMsgLen
[out] 无符号整型数指针,指向读到的文字信息长度,最长 256 字节。
pucPHMsg
[out] 无符号字符型指针,指向读到的相片信息,其长度由 puiPHMsgLen 参数
输出。该指针指向的存储空间由调用者分配,不得小于 1024 字节。
puiPHMsgLen
[out] 无符号整型数指针,指向读到的相片信息长度,最长 1024 字节。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
 
返回值: 
0x90 读机读文字信息和相片信息成功。
其它 读机读文字信息和相片信息失败(具体含义参见 6 函数返回码表)。
4.3.4 SDT_ReadBaseMsgToFile 
读取居民身份证机读文字信息和相片信息,将读取到的信息写到输入参数所指定的文件
中。
int SDT_ReadBaseMsgToFile (
int iPort,
char * pcCHMsgFileName,
unsigned int * puiCHMsgFileLen,
char * pcPHMsgFileName,
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
19
unsigned int * puiPHMsgFileLen,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pcCHMsgFileName
[in] 字符型指针,由用户指定的文件名,将读取到的居民身份证机读文字信
息写入该文件。
puiCHMsgFileLen
[out] 无符号整型数指针,文件的长度。
pcPHMsgFileName
[in] 字符型指针,由用户指定的文件名,将读取到的居民身份证机读相片信
息写入该文件。
puiPHMsgFileLen
[out] 无符号整型数指针,文件的长度。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 读机读文字信息和相片信息成功。
其它 读机读文字信息和相片信息失败(具体含义参见 6 函数返回码表)。
4.3.5 SDT_ReadBaseFPMsg 
读取居民身份证机读文字信息、相片信息和指纹信息。
注意:该接口只能用于支持读取指纹信息的 SAM_A。
int SDT_ReadBaseFPMsg (
int iPort,
unsigned char * pucCHMsg, 
unsigned int * puiCHMsgLen,
unsigned char * pucPHMsg, 
unsigned int * puiPHMsgLen,
unsigned char * pucFPMsg, 
unsigned int * puiFPMsgLen,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucCHMsg
[out] 无符号字符型指针,指向读到的机读文字信息,其长度由 puiCHMsgLen
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
20
参数输出。该指针指向的存储空间由调用者分配,不得小于 256 字节。
puiCHMsgLen
[out] 无符号整型数指针,指向读到的机读文字信息长度,最长 256 字节。
pucPHMsg
[out] 无符号字符型指针,指向读到的机读相片信息,其长度由 puiPHMsgLen
参数输出。该指针指向的存储空间由调用者分配,不得小于 1024 字节。
puiPHMsgLen
[out] 无符号整型数指针,指向读到的机读相片信息长度,最长 1024 字节。
pucFPMsg
[out] 无符号字符型指针,指向读到的指纹信息,其长度由 puiFPMsgLen 参数
输出。该指针指向的存储空间由调用者分配,不得小于 1024 字节。
puiFPMsgLen
[out] 无符号整型数指针,指向读到的指纹信息长度,最长 1024 字节。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 读机读文字信息、相片信息和指纹信息成功。如果 puiFPMsgLen 指向
的无符号整数等于 0,表明身份证中没有指纹信息;如果 puiFPMsgLen
指向的无符号整数大于 0,表明正确地读出了指纹信息。
0x21 错误的命令。可使用 SDT_ReadBaseMsg 接口读取机读文字和相片信
息。 
0x37 指纹信息验证错误。
其它 读取机读文字信息、相片信息和指纹信息失败(具体含义参见 6 函数
返回码表)。
4.3.6 SDT_ReadBaseFPMsgToFile 
读取居民身份证机读文字信息、相片信息和指纹信息,将读取到的信息写到输入参数所
指定的文件中。
注意:该接口只能用于支持读取指纹信息的 SAM_A。
int SDT_ReadBaseFPMsgToFile (
int iPort,
char * pcCHMsgFileName,
unsigned int * puiCHMsgFileLen,
char * pcPHMsgFileName,
unsigned int * puiPHMsgFileLen,
char * pcFPMsgFileName,
unsigned int * puiFPMsgFileLen,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
21
pcCHMsgFileName
[in] 由用户指定的文件名,将读取到的居民身份证机读文字信息写入该文件。
puiCHMsgFileLen
[out] 无符号整型数指针,文件的长度。
pcPHMsgFileName
[in] 由用户指定的文件名,将读取到的居民身份证机读相片信息写入该文件。
puiPHMsgFileLen
[out] 无符号整型数指针,文件的长度。
puiFPMsgFileName
[in] 由用户指定的文件名,将读取到的居民身份证指纹信息写入该文件。
puiFPMsgFileLen
[out] 无符号整型数指针,文件的长度。
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 读机读文字信息、相片信息和指纹信息成功。如果 puiFPMsgFileLen
指向的无符号整数等于 0,表明身份证中没有指纹信息;如果
puiFPMsgFileLen 指向的无符号整数大于 0,表明正确地读出了指纹
信息。
0x21 错误的命令。可使用 SDT_ReadBaseMsgToFile 接口读取机读文字和相
片信息。
0x37 指纹信息验证错误。
其它 读取机读文字信息、相片信息和指纹信息失败(具体含义参见 6 函数
返回码表)。
 
4.3.7 SDT_ReadNewAppMsg 
读取追加地址信息。
int SDT_ReadNewAppMsg (
int iPort,
unsigned char * pucAppMsg,
unsigned int * puiAppMsgLen,
int iIfOpen
);
参数说明: 
iPort
[in] 整数,表示端口号。参见 SDT_OpenPort。
pucAppMsg
[out] 无符号字符串,指向读到的追加地址信息,其长度由 puiAppMsgLen 参
数输出。该指针指向的存储空间由调用者分配,不得小于 70 字节。
puiAppMsgLen
[out] 指向整数的指针,指向读到的追加地址信息长度,最长 70 字节。
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
22
iIfOpen
[in] 整数,参见 SDT_ResetSAM。
返回值: 
0x90 读取追加地址信息成功。
0x91 居民身份证中无追加地址信息。
其它 读取追加地址信息失败(具体含义参见 6 函数返回码表)。
5. API 调用方式 
5.1调用顺序
API 的调用有先后顺序,每一个 API 都有一个调用层级号。层级号大的函数执行前必须
执行比其层级号小 1 的函数,即(1)级函数最先执行,然后可以执行(2)级函数,然后可以执
行(3)级函数,以此类推。同一层级函数的调用没有先后顺序。
SDT_StartFindIDCard(1)
SDT_SelectIDCard(2)
SDT_ReadBaseMsg(3)
SDT_ReadNewAppMsg(3)
SDT_ReadBaseFPMsg(3)
SDT_ReadBaseFPMsgToFile(3)
SDT_ReadBaseMsgToFile(3)
5.2C 语言示例程序
//C 语言验证示例程序
#include <stdio.h>
#include <string.h>
#include "sdtapi.h" //动态连接库头文件
void main()
{
char cInput;
int iRet; //返回码
int iPort; //端口号
int iIfOpen; //是否需要打开端口
unsigned char pucManaInfo[4];
unsigned char pucManaMsg[8];
unsigned char pucCHMsg[256]; //文字信息最长 256 字节
unsigned char pucPHMsg[1024]; //相片信息最长 1024 字节
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
23
unsigned char pucFPMsg[1024]; //指纹信息最长 1024 字节
unsigned int uiCHMsgLen,uiPHMsgLen,uiFPMsgLen;
iPort=1001; //USB 接口
iIfOpen=0;
if(iIfOpen==0)
{
iRet=SDT_OpenPort(iPort);
if(iRet!=0x90)
{
printf("打开端口(%d)失败,返回值为: %02x",iPort, iRet);
SDT_ClosePort(iPort);
return;
}
}
do //找卡
{
iRet=SDT_StartFindIDCard(iPort, pucManaInfo, iIfOpen);
if(iRet==0x9f)
{
iRet=SDT_SelectIDCard (iPort, pucManaMsg,iIfOpen);
if(iRet!=0x90)
{
printf("选卡失败,返回值为:%02x\n", iRet);
printf("请重新放卡,进行找卡、选卡?继续按\"y\",退出按\"n\" \n");
}
else
{
break;
}
}
else
{
printf("未找到身份证卡,请重新放卡。继续按\"y\",退出按\"n\" \n");
}
scanf("%c", &cInput);
}
while(!(cInput=='n'));
if(cInput=='n')
{
printf("放弃找卡,退出程序\n");
return ;
}
/* SDT_ReadBaseMsg()和SDT_ReadBaseFPMsg()都要在SDT_SelectIDCard()成功后
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
24
调用。SDT_ReadBaseMsg()只读出文字和相片信息;SDT_ReadBaseFPMsg()读出文字、相片
和指纹信息。这两个接口调用没有顺序要求。*/
iRet=SDT_ReadBaseMsg(iPort, 
pucCHMsg, 
&uiCHMsgLen, 
pucPHMsg, 
&uiPHMsgLen, 
iIfOpen);
if(iRet!=0x90)
{
printf("读取身份证机读文字信息和相片信息失败,返回值为: %02x\n", iRet);
if(iIfOpen==0)
SDT_ClosePort(iPort);
return;
}
printf("SDT_ReadBaseMsg OK\n");
iRet=SDT_ReadBaseFPMsg(iPort,pucCHMsg, 
&uiCHMsgLen, 
pucPHMsg, 
&uiPHMsgLen, 
pucFPMsg, 
&uiFPMsgLen, 
iIfOpen);
if(iRet==0x21)
{
printf("此安全控制模块不支持 SDT_ReadBaseFPMsg 接口!返回值为:%02x\n
请使用 SDT_ReadBase Msg 接口。\n",iRet);
}
else if(iRet==0x37)
{
printf("指纹信息验证错误!返回值为:%02x\n",iRet);
}
else if(iRet!=0x90)
{
printf("读取身份证机读文字信息、相片信息和指纹信息失败,返回值
为: %02x\n", iRet);
}
else 
{
if(uiFPMsgLen==0) //身份证中没有指纹信息
{
printf("身份证卡中没有指纹信息\n");
}
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
25
else
{
printf("SDT_ReadBaseFPMsg OK\n");
}
}
if(iIfOpen==0)
SDT_ClosePort(iPort);
}
居民身份证嵌入式安全控制模块接口 API 使用手册 V1.0.0
26
6. 函数返回码表 
返回值 意 义 
0x90 操作成功
0x91 居民身份证中无此项内容
0x9F 寻找居民身份证成功
0x01 端口打开失败/端口尚未打开/端口号不合法
0x02 PC 接收超时,在规定的时间内未接收到规定长度的数据
0x03 数据传输错误
0x05 SAM_A 串口不可用,只有 SDT_GetCOMBaud 函数返回
0x09 打开文件失败
0x10 接收业务终端数据的校验和错
0x11 接收业务终端数据的长度错
0x21 接收业务终端的命令错误,包括命令中的各种数值或逻辑搭配错误
0x23 越权操作
0x24 无法识别的错误
0x80 寻找居民身份证失败
0x81 选取居民身份证失败
0x31 居民身份证认证 SAM_A 失败
0x32 SAM_A 认证居民身份证失败
0x33 信息验证失败
0x37 指纹信息验证错误
0x3F 信息长度错误
0x40 无法识别的居民身份证类型
0x41 读居民身份证操作失败
0x47 取随机数失败
0x60 SAM_A 自检失败,不能接收命令
0x66 SAM_A 没经过授权,无法使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值