新中新身份证读卡器接口精编I使用手册.docx
《新中新身份证读卡器接口精编I使用手册.docx》由会员分享,可在线阅读,更多相关《新中新身份证读卡器接口精编I使用手册.docx(9页珍藏版)》请在冰豆网上搜索。
新中新身份证读卡器接口精编I使用手册
RevisedbyLiuJingonJanuary12,2021
新中新身份证读卡器接口精编I使用手册
居民身份证验证读卡器接口
API使用手册
哈尔滨新中新电子股份有限公司
2004年12月
1.端口类API
intSyn_OpenPort(intiPortID);
说明:
打开串口/USB口
参数:
iPortID[in]整数,表示端口号。
1-16(十进制)为串口,1001-1016(十进制)为USB口,缺省的一个USB设备端口号是1001。
返回值:
成功返回0,错误返回见6。
intSyn_ClosePort(intiPortID);
说明:
关闭串口/USB口
参数:
iPortID[in]整数,表示端口号。
返回值:
成功返回0,错误返回见6。
intSyn_GetCOMBaud(intiComID,unsignedint*puiBaudRate);
说明:
查看串口的波特率
参数:
iPort[in]整数,表示端口号。
此处端口号必须为1-16,表示串口,参见7.1。
puiBaudRate[out]无符号整数指针,指向普通串口当前波特率,默认情况下为115200。
返回值:
成功返回0,错误返回见6。
intSyn_SetCOMBaud(intiComID,unsignedintuiCurrBaud,unsignedintuiSetBaud);
说明:
设置串口的波特率
参数:
iPort[in]整数,表示端口号。
此处端口号必须为1-16,表示串口。
uiCurrBaud[in]无符号整数,调用该API前已设置的业务终端与SAM_V通信的波特率(SAM_V出厂时默认,业务终端与SAM_V通信的波特率为115200)。
业务终端以该波特率与SAM_V通信,发出设置SAM_V新波特率的命令。
uiCurrBaud只能为下列数值之一:
115200,57600,38400,19200,9600.如果uiCurrBaud数值不是这些值之一,函数返回0x21;如果已设置的波特率与uiCurrBaud不一致,则函数返回非零,表示不能设置,调用API不成功。
uiSetBaud[in]符号整数,将要设置的SAM_V与业务终端通信波特率。
uiSetBaud只能取下列值之一:
115200,57600,38400,19200,9600,如果输入uiSetBaud参数不是这些数值之一,函数返回非零,设置不成功,保持原来的波特率不变。
返回值:
成功返回0,错误返回见6。
2.SAM类API
intSyn_GetSAMStatus(intiPortID,intiIfOpen);
说明:
对SAM_V进行状态检测
参数:
iPort[in]整数,表示端口号。
参见7.1。
iIfOpen[in]整数,参见7.2。
返回值:
成功返回0,错误返回见6。
intSyn_ResetSAM(intiPortID,intiIfOpen);
说明:
对SAM_V复位
参数:
iPort[in]整数,表示端口号。
参见7.1。
iIfOpen[in]整数,参见7.2。
返回值:
成功返回0,错误返回见6。
intSyn_GetSAMID(intiPortID,unsignedchar*pucSAMID,intiIfOpen);
说明:
读取SAM_V的编号(十六进制)
参数:
iPort[in]整数,表示端口号。
参见7.1。
pucSAMID[out]无符号字符串指针,SAM_V编号,16字节。
iIfOpen[in]整数,参见7.2。
返回值:
成功返回0,错误返回见6。
intSyn_GetSAMIDToStr(intiPortID,char*pcSAMID,intiIfOpen);
说明:
读取SAM_V的编号(字符串格式)
参数:
iPort[in]整数,表示端口号。
参见7.1。
pcSAMID[out]字符串指针,SAM_V编号。
iIfOpen[in]整数,参见7.2。
返回值:
成功返回0,错误返回见6。
3.身份证卡类API
intSyn_StartFindIDCard(intiPortID,unsignedchar*pucManaInfo,intiIfOpen);
说明:
开始找卡
参数:
iPort[in]整数,表示端口号。
参见7.1。
pucManaInfo[out]无符号字符指针,证/卡芯片管理号,4个字节。
iIfOpen[in]整数,参见7.2。
返回值:
成功返回0,错误返回见6。
intSyn_SelectIDCard(intiPortID,unsignedchar*pucManaMsg,intiIfOpen);
说明:
选卡
参数:
iPort[in]整数,表示端口号。
参见7.1。
pucManaMsg[out]无符号字符指针,证/卡芯片序列号,8个字节。
iIfOpen[in]整数,参见7.2。
返回值:
成功返回0,错误返回见6。
intSyn_ReadMsg(intiPortID,intiIfOpen,IDCardData*pIDCardData);
说明:
读取证/卡信息
参数:
iPort[in]整数,表示端口号。
参见7.1。
iIfOpen[in]整数,参见7.2。
pIDCardData[out]IDCardData类型读出的数据,参见5。
返回值:
成功返回0,错误返回见6。
4.附加类API
intSyn_SendSound(intiCmdNo);
说明:
发送语音
参数:
iCmdNo[in]声音编号
返回值:
成功返回0,错误返回见6。
voidSyn_DelPhotoFile();
说明:
删除临时照片文件
参数:
无
返回值:
成功返回0,错误返回见6。
5.结构体声明
typedefstructtagIDCardData{
charName[32];//姓名
charSex[4];//性别
charNation[6];//名族
charBorn[18];//出生日期
charAddress[72];//住址
charIDCardNo[38];//身份证号
charGrantDept[32];//发证机关
charUserLifeBegin[18];//有效开始日期
charUserLifeEnd[18];//有效截止日期
charreserved[38];//保留
charPhotoFileName[255];//照片路径
}IDCardData;
6.函数返回值
0操作成功或相片解码解码正确
-1端口打开失败/端口尚未打开/端口号不合法
-2证/卡中此项无内容
-3PC接收超时,在规定的时间内未接收到规定长度的数据
-4数据传输错误
-5该SAM_V串口不可用,只在SDT_GetCOMBaud时才有可能返回
-6接收业务终端数据的校验和错
-7接收业务终端数据的长度错
-8接收业务终端的命令错误,包括命令中的各种数值或逻辑搭配错误
-9越权操作
-10无法识别的错误
-11寻找证/卡失败
-12选取证/卡失败
-13调用sdtapi.dll错误
-14相片解码错误
-15授权文件不存在
-16设备连接错误
7.注意
7.1系统支持的串行端口号:
1-16,USB端口号:
1001-1016
7.2iIfOpen[in]整数,0表示不在该函数内部打开和关闭串口,此时确保之前调用了Syn_OpenPort来打开端口,并且在不需要与端口通信时,调用Syn_ClosePort关闭端口;非0表示在API函数内部包含了打开端口和关闭端口函数,之前不需要调用Syn_OpenPort,也不用再调用Syn_ClosePort。
7.3普通开发中只使用“端口类API”与“身份证卡类API”与“附加类API”就能满足开发需要,
使用方法见第10部分实例。
7.4在使用Syn_SendSound函数时请先用Syn_ClosePort函数关闭打开的端口。
7.5SDK包包含文件
Syn_IDCardRead.dll、Syn_IDCardRead.lib、Syn_IDCardRead.h、sdtapi.dll、WltRS.dll
8.声音命令暂时未定
1.读身份证成功
9.Syn_IDCardRead.h头文件:
#ifdef_WIN32
#defineSTDCALL__stdcall
#else
#defineSTDCALL
#endif
#ifndefSDTAPI_
#defineSDTAPI_
#ifdef__cplusplus
extern"C"{
#endif
#pragmapack
(1)
typedefstructtagIDCardData{
charName[32];
charSex[4];
charNation[6];
charBorn[18];
charAddress[72];
charIDCardNo[38];
charGrantDept[32];
charUserLifeBegin[18];
charUserLifeEnd[18];
charreserved[38];
charPhotoFileName[255];
}IDCardData;
#pragmapack()
/************************端口类API*************************/
intSTDCALLSyn_GetCOMBaud(intiComID,unsignedint*puiBaud);
intSTDCALLSyn_SetCOMBaud(intiComID,unsignedintuiCurrBaud,unsignedintuiSetBaud);
intSTDCALLSyn_OpenPort(intiPortID);
intSTDCALLSyn_ClosePort(intiPortID);
/************************SAM类API*************************/
intSTDCALLSyn_GetSAMStatus(intiPortID,intiIfOpen);
intSTDCALLSyn_ResetSAM(intiPortID,intiIfOpen);
intSTDCALLSyn_GetSAMID(intiPortID,unsignedchar*pucSAMID,intiIfOpen);
intSTDCALLSyn_GetSAMIDToStr(intiPortID,char*pcSAMID,intiIfOpen);
/********************身份证卡类API*************************/
intSTDCALLSyn_StartFindIDCard(intiPortID,unsignedchar*pucManaInfo,intiIfOpen);
intSTDCALLSyn_SelectIDCard(intiPortID,unsignedchar*pucManaMsg,intiIfOpen);
intSTDCALLSyn_ReadMsg(intiPortID,intiIfOpen,IDCardData*pIDCardData);
/********************附加类API*****************************/
intSTDCALLSyn_SendSound(intiCmdNo);
voidSTDCALLSyn_DelPhotoFile();
#ifdef__cplusplus
}
#endif
#endif
}
10.调用实例:
10.1vc6.0调试通过
voidCSampleDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
intifOpen;
intiPort;
intiRet;
unsignedcharpucIIN[4];
unsignedcharpucSN[8];
IDCardDataCardMsg;
ifOpen=0;//是否需要打开串口
iPort=1;
iRet=Syn_OpenPort(iPort);
if(iRet==0)
{
iRet=Syn_StartFindIDCard(iPort,pucIIN,ifOpen);
if(iRet==0)
{
iRet=Syn_SelectIDCard(iPort,pucSN,ifOpen);
if(iRet==0)
{
iRet=Syn_ReadMsg(iPort,0,&CardMsg);
if(iRet==0)
{
//显示读出的信息
UpdateData(true);
m_name=CardMsg.Name;
UpdateData(false);
Syn_SendSound(0);
Syn_DelPhotoFile();
}
}
}
}
Syn_ClosePort(iPort);
}
10.2delphi7.0调试通过
首先将Syn_IDCardRead.h翻译为Delphi格式。
procedureTForm1.Button4Click(Sender:
TObject);
var
ifOpen:
integer;
iPort:
integer;
iRet:
integer;
pucIIN:
array[0..3]ofByte;
pucSN:
array[0..7]ofByte;
CardMsg:
TCard;
begin
IfOpen:
=0;//是否需要打开串口
iPort:
=1;
iRet:
=Syn_OpenPort(iPort);
ifiRet<>0then
begin
Syn_ClosePort(iPort);
Exit;
end;
iRet:
=Syn_StartFindIDCard(iPort,@pucIIN,IfOpen);
ifiRet=0then
begin
iRet:
=Syn_SelectIDCard(iPort,@pucSN,IfOpen);
ifiRet=0then
begin
iRet:
=Syn_ReadMsg(iPort,0,CardMsg);
ifiRet=0then
begin
label1.Caption:
=trim(CardMsg.Name);
label2.Caption:
=trim(CardMsg.Sex);
label3.Caption:
=trim(CardMsg.Nation);
label4.Caption:
=trim(CardMsg.Born);
label5.Caption:
=trim(CardMsg.Address);
label6.Caption:
=trim(CardMsg.IDCardNo);
label7.Caption:
=trim(CardMsg.GrantDept);
label8.Caption:
=trim(CardMsg.UserLifeBegin);
label9.Caption:
=trim(CardMsg.UserLifeEnd);
label10.Caption:
=trim(CardMsg.reserved);
:
=True;
:
=
Syn_SendSound(0);
Syn_DelPhotoFile;
end;
end;
end;
Syn_ClosePort(iPort);
end;