求操作新中新二代证阅读器的VB实例

planetike 2007-03-27 01:16:07
今天拿到手一个新中新二代证阅读器,经销商说是给一个SDK开发包,但是里面只有VC,delphi的实例代码,看不懂。
不知道有没有老大曾经做过类似的项目,可否共享一下,事成后,一定另外开帖把所有分数送上。
...全文
847 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
LKY8848 2011-09-17
  • 打赏
  • 举报
回复
提供通用二代身份证WEB终端控件及控件的VB源代码:

提供二代身份证WEB终端控件 lkySfzCard.ocx ,用于WEB开发,并提供该控件的VB源代码,有需要者请联系我。
QQ:150227334

LKY8848 2011-09-17
  • 打赏
  • 举报
回复
提供通用二代身份证WEB终端控件及控件的VB源代码:

提供二代身份证WEB终端控件 lkySfzCard.ocx ,用于WEB开发,并提供该控件的VB源代码,有需要者请联系我。
QQ:150227334

mybabyyuli 2009-03-06
  • 打赏
  • 举报
回复
北京昊普思创新科技有限公司,身份证读卡器绝对好使又便宜,二次开发支持VC、VB等等一系列语言。联系电话:15811021395(陈)
billwang2005 2008-06-05
  • 打赏
  • 举报
回复
Private Declare Function Syn_OpenPort Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long) As Long
Private Declare Function Syn_ClosePort Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long) As Long

Private Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_SelectIDCard Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_ReadMsg Lib "Syn_IDCardRead.dll " (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long


Private Type tagIDCardData
Name As String * 32
Sex As String * 4
Nation As String * 6
Born As String * 18
Address As String * 72
IDCardNo As String * 38
GrantDept As String * 32
UserLifeBegin As String * 18
UserLifeEnd As String * 18
reserved As String * 38
PhotoFileName As String * 255
End Type

Private Sub Command1_Click()
Dim ifOpen As Integer
Dim iPort As Integer
Dim iRet As Integer
Dim pucIIN As String * 4
Dim pucSN As String * 8
Dim CardMsg As tagIDCardData

ifOpen = 0
iPort = 1
iRet = Syn_OpenPort(iPort)
pucIIN = Space(4)
pucSN = Space(8)
MsgBox iRet
If iRet = 0 Then
iRet = Syn_StartFindIDCard(iPort, pucIIN, iffopen)//这里总是返回-3而不是0,不知道是不是哪里定义有问题

MsgBox iRet
Syn_ClosePort iPort
End If
End Sub

现附上SDK全部内容,麻请各位高手帮我看看是怎么回事!谢谢
1. 端口类API
int Syn_OpenPort(int iPortID);
说明: 打开串口/USB口

参数:iPortID [in] 整数,表示端口号。1-16(十进制)为串口,1001-1016(十进制)为USB口,缺省的一个USB设备端口号是1001。

返回值:成功返回0,错误返回见6。

int Syn_ClosePort(int iPortID);
说明: 关闭串口/USB口

参数:iPortID [in] 整数,表示端口号。

返回值:成功返回0,错误返回见6。

int Syn_GetCOMBaud(int iComID,unsigned int *puiBaudRate);
说明: 查看串口的波特率

参数:iPort [in] 整数,表示端口号。此处端口号必须为1-16,表示串口,参见7.1。 puiBaudRate [out] 无符号整数指针,指向普通串口当前波特率, 默认情况下为 115200。

返回值:成功返回0,错误返回见6。

int Syn_SetCOMBaud(int iComID,unsigned int uiCurrBaud,unsigned int uiSetBaud);
说明: 设置串口的波特率


返回值:成功返回0,错误返回见6。







2. SAM类API
int Syn_GetSAMStatus(int iPortID,int iIfOpen);
说明: 对SAM_V进行状态检测

参数:iPort [in] 整数,表示端口号。参见7.1。
iIfOpen [in] 整数,参见7.2。

返回值:成功返回0,错误返回见6。

int Syn_ResetSAM(int iPortID,int iIfOpen);
说明: 对SAM_V复位

参数:iPort [in] 整数,表示端口号。参见7.1。
iIfOpen [in] 整数,参见7.2。

返回值:成功返回0,错误返回见6。

int Syn_GetSAMID(int iPortID,unsigned char *pucSAMID,int iIfOpen);
说明: 读取SAM_V的编号(十六进制)

参数:iPort [in] 整数,表示端口号。参见7.1。
pucSAMID [out] 无符号字符串指针,SAM_V编号,16字节。
iIfOpen [in] 整数,参见7.2。

返回值:成功返回0,错误返回见6。

int Syn_GetSAMIDToStr(int iPortID,char *pcSAMID,int iIfOpen);
说明: 读取SAM_V的编号(字符串格式)

参数:iPort [in] 整数,表示端口号。参见7.1。
pcSAMID [out] 字符串指针,SAM_V编号。
iIfOpen [in] 整数,参见7.2。

返回值:成功返回0,错误返回见6。

3. 身份证卡类API
int Syn_StartFindIDCard(int iPortID,unsigned char *pucManaInfo,int iIfOpen);
说明: 开始找卡

参数:iPort [in] 整数,表示端口号。参见7.1。
pucManaInfo [out] 无符号字符指针,证/卡芯片管理号,4个字节。
iIfOpen [in] 整数,参见7.2。

返回值:成功返回0,错误返回见6。




int Syn_SelectIDCard(int iPortID,unsigned char *pucManaMsg,int iIfOpen);
说明: 选卡

参数:iPort [in] 整数,表示端口号。参见7.1。
pucManaMsg [out] 无符号字符指针,证/卡芯片序列号,8个字节。
iIfOpen [in] 整数,参见7.2。

返回值:成功返回0,错误返回见6。

int Syn_ReadMsg(int iPortID,int iIfOpen,IDCardData *pIDCardData);
说明: 读取证/卡信息

参数:iPort [in] 整数,表示端口号。参见7.1。
iIfOpen [in] 整数,参见7.2。
pIDCardData [out] IDCardData类型读出的数据,参见5。

返回值:成功返回0,错误返回见6。

4. 附加类API
int Syn_SendSound(int iCmdNo);
说明: 发送语音

参数:iCmdNo [in] 声音编号

返回值:成功返回0,错误返回见6。

void Syn_DelPhotoFile();
说明: 删除临时照片文件

参数:无

返回值:成功返回0,错误返回见6。

5. 结构体声明
typedef struct tagIDCardData{
char Name[32]; //姓名
char Sex[4]; //性别
char Nation[6]; //名族
char Born[18]; //出生日期
char Address[72]; //住址
char IDCardNo[38]; //身份证号
char GrantDept[32]; //发证机关
char UserLifeBegin[18]; //有效开始日期
char UserLifeEnd[18]; //有效截止日期
char reserved[38]; //保留
char PhotoFileName[255]; //照片路径
}IDCardData;

6.函数返回值
0 操作成功或相片解码解码正确
-1 端口打开失败/端口尚未打开/端口号不合法
-2 证/卡中此项无内容
-3 PC接收超时,在规定的时间内未接收到规定长度的数据
-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.2 iIfOpen [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.5 SDK包包含文件
Syn_IDCardRead.dll、Syn_IDCardRead.lib、Syn_IDCardRead.h、sdtapi.dll、WltRS.dll

8.声音命令暂时未定
0. 读身份证成功












9.Syn_IDCardRead.h头文件:
#ifdef _WIN32
#define STDCALL __stdcall
#else
#define STDCALL
#endif
#ifndef SDTAPI_
#define SDTAPI_
#ifdef __cplusplus
extern "C"{
#endif

#pragma pack(1)
typedef struct tagIDCardData{
char Name[32];
char Sex[4];
char Nation[6];
char Born[18];
char Address[72];
char IDCardNo[38];
char GrantDept[32];
char UserLifeBegin[18];
char UserLifeEnd[18];
char reserved[38];
char PhotoFileName[255];
}IDCardData;

#pragma pack()

/************************端口类API *************************/
int STDCALL Syn_GetCOMBaud(int iComID,unsigned int *puiBaud);
int STDCALL Syn_SetCOMBaud(int iComID,unsigned int uiCurrBaud,unsigned int uiSetBaud);
int STDCALL Syn_OpenPort(int iPortID);
int STDCALL Syn_ClosePort(int iPortID);

/************************ SAM类API *************************/
int STDCALL Syn_GetSAMStatus(int iPortID,int iIfOpen);
int STDCALL Syn_ResetSAM(int iPortID,int iIfOpen);
int STDCALL Syn_GetSAMID(int iPortID,unsigned char *pucSAMID,int iIfOpen);
int STDCALL Syn_GetSAMIDToStr(int iPortID,char *pcSAMID,int iIfOpen);

/********************身份证卡类API *************************/
int STDCALL Syn_StartFindIDCard(int iPortID,unsigned char *pucManaInfo,int iIfOpen);
int STDCALL Syn_SelectIDCard(int iPortID,unsigned char *pucManaMsg,int iIfOpen);
int STDCALL Syn_ReadMsg(int iPortID,int iIfOpen,IDCardData *pIDCardData);

/********************附加类API *****************************/
int STDCALL Syn_SendSound(int iCmdNo);
void STDCALL Syn_DelPhotoFile();
#ifdef __cplusplus
}
#endif
#endif
}

10.调用实例:








10.1 vc6.0调试通过
void CSampleDlg::OnButton1()
{
// TODO: Add your control notification handler code here
int ifOpen;
int iPort;
int iRet;
unsigned char pucIIN[4];
unsigned char pucSN[8];
IDCardData CardMsg;

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);

}

marty2000 2007-07-24
  • 打赏
  • 举报
回复
我有二代证阅读器的开发接口,可以支持WINDOWS的所有开发语言,并且可以支持WEB读卡。
有意者可以和我联系
QQ:35499174
ZOU_SEAFARER 2007-03-28
  • 打赏
  • 举报
回复
在VB里面引用这个DLL对象,然后DIM XX AS NEW ......
再后来就看里面提供的方法和属性等了
vbman2003 2007-03-28
  • 打赏
  • 举报
回复
不会,帮顶
  • 打赏
  • 举报
回复
没研究过,支持一下。
planetike 2007-03-28
  • 打赏
  • 举报
回复
狼大哥,现在是这样一个问题,请帮忙看一下

C中是这样定义的:
int STDCALL Syn_StartFindIDCard(int iPortID,unsigned char *pucManaInfo,int iIfOpen);
调用时:
int ifOpen;
int iPort;
int iRet;
unsigned char pucIIN[4];
ifOpen=0;//是否需要打开串口
iPort=1;
iRet=Syn_StartFindIDCard(iPort,pucIIN,ifOpen);

而翻译成VB后我是这样定义的:
Private Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long

调用时:
Dim ifOpen As Integer
Dim iPort As Integer
Dim iRet As Integer
Dim pucIIN As String * 4
ifOpen = 0
iPort = 1
pucIIN = Space(4) '在网上搜了很久,说要给这个字符串赋一个初始值。
iRet = Syn_StartFindIDCard(iPort, pucIIN, ifOpen)//这里总是返回-3而不是0,不知道是不是参数定义有问题

错误代误说明:-3 PC接收超时,在规定的时间内未接收到规定长度的数据

射天狼 2007-03-28
  • 打赏
  • 举报
回复
你说的阅读器我没用过,不过SDK是弄过。一般的SDK都提供VC、VB、DELPHI等演示。

你的没有,建议你将DELPHI示例改成VB的。个人感觉,相对从VC转容易一些。

═══════════════════
http://www.egooglet.com 资料、源码下载

http://bbs.j2soft.cn 论坛交流
═══════════════════
Red_angelX 2007-03-27
  • 打赏
  • 举报
回复
主要就看sdk帮助和示例代码了 努力去看怎么调用的就好了
hongqi162 2007-03-27
  • 打赏
  • 举报
回复
没见过,你可以把vc或delphi的翻译成vb的,或者直接就用他们提供的附加你的功能
planetike 2007-03-27
  • 打赏
  • 举报
回复
//这是文档里带着的一个VC的例子

void CSampleDlg::OnButton1()
{ //TODO:Add your control notification handler code here
int ifOpen;
int iPort;
int iRet;
unsigned char pucIIN[4];
unsigned char pucSN[8];
IDCardData CardMsg;
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_ReaMsg(iPort,0,&CardMsg);
if(iRet==0)
{ //显示读出的信息
UpdateData(true);
m_name-CardMsg.Name;
UpdateData(false);
Syn_SendSound(0);
Syn_DelPhotoFile();
}
}

}

}
Syn_ClosePort(iPort);
}
planetike 2007-03-27
  • 打赏
  • 举报
回复
0 操作成功或相片解码正确
-1 端口打开失改/端口尚未打开/端口号不合法
-2 证/卡中此项无内容
-3 PC接收超时,在规定的时间内未接收到规定长度的数据
-4 数据传输错误
-5 该SAM_V串口不可用,只在SDT_GetCOMBaud时才有可能返回。
-6 接收业务终端数据的校验和错
-7 接收业务终端数据的长度错
-8 接收业务终端的命令错误,包括命令中的各种数值或逻辑搭配错误
-9 越权操作
-10 无法识别的错误
-11 寻找证/卡失败
-12 选取证/卡失败
-13 调用sdtapi.dll错误
-14 相片解码错误
-15 授权文件不存在
-16 设备连接错误
hongqi162 2007-03-27
  • 打赏
  • 举报
回复
返回-3?

有没有文档可以看啊
planetike 2007-03-27
  • 打赏
  • 举报
回复
月亮,我想请问一下。为什么每次打开端口都正确了,但是用Syn_StartFindIDCard函数时,却总是返回不正确。我把代码贴出来,还请指点一下。

Private Declare Function Syn_OpenPort Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long) As Long
Private Declare Function Syn_ClosePort Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long) As Long

Private Declare Function Syn_StartFindIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_SelectIDCard Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_ReadMsg Lib "Syn_IDCardRead.dll" (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long


Private Type tagIDCardData
Name As String * 32
Sex As String * 4
Nation As String * 6
Born As String * 18
Address As String * 72
IDCardNo As String * 38
GrantDept As String * 32
UserLifeBegin As String * 18
UserLifeEnd As String * 18
reserved As String * 38
PhotoFileName As String * 255
End Type

Private Sub Command1_Click()
Dim ifOpen As Integer
Dim iPort As Integer
Dim iRet As Integer
Dim pucIIN As String * 4
Dim pucSN As String * 8
Dim CardMsg As tagIDCardData

ifOpen = 0
iPort = 1
iRet = Syn_OpenPort(iPort)
pucIIN = Space(4)
pucSN = Space(8)
MsgBox iRet
If iRet = 0 Then
iRet = Syn_StartFindIDCard(iPort, pucIIN, iffopen)//这里总是返回-3而不是0,不知道是不是哪里定义有问题

MsgBox iRet
Syn_ClosePort iPort
End If
End Sub
hongqi162 2007-03-27
  • 打赏
  • 举报
回复
Private Declare Function Syn_StartFindIDCard Lib "aa" (byvaliPortID As Long, ByRef pucManaInfo As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_SelectIDCard Lib "aa" (ByVal iPortID As Long, ByRef pucManaMsg As String, ByVal iIfOpen As Long) As Long
Private Declare Function Syn_ReadMsg Lib "aa" (ByVal iPortID As Long, ByVal iIfOpen As Long, ByRef pIDCardData As Any) As Long
planetike 2007-03-27
  • 打赏
  • 举报
回复
能请你帮我把这三个函数一起翻译一下吗?

int STDCALL Syn_StartFindIDCard(int iPortID,unsigned char *pucManaInfo,int iIfOpen);
int STDCALL Syn_SelectIDCard(int iPortID,unsigned char *pucManaMsg,int iIfOpen);
int STDCALL Syn_ReadMsg(int iPortID,int iIfOpen,IDCardData *pIDCardData);
planetike 2007-03-27
  • 打赏
  • 举报
回复
月亮,太感谢你了,我先试试
hongqi162 2007-03-27
  • 打赏
  • 举报
回复
Public Declare Function Syn_GetCOMBaud Lib "dll" (ByVal iComID As Long, ByRef puiBaud As Long) As Long


...................
加载更多回复(2)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧