注册 登录
编程论坛 VFP论坛

请教如何实现华视身份证读卡器自动读卡!

jsddx 发布于 2021-04-22 09:30, 5240 次点击
各位老师,请教如何实现华视身份证读卡器自动读取身份证信息!

谢谢

只有本站会员才能查看附件,请 登录
10 回复
#2
厨师王德榜2021-04-22 09:53
没有开发文档吗? 没有的话,只能猜测一下,
大致是sdtapi.dll 先打开端口,图1这个
只有本站会员才能查看附件,请 登录

然后用termb.dll 读取数据,图2这几个函数.
只有本站会员才能查看附件,请 登录

可能还有其它的伴随动作,具体要查他给的说明才行.
否则这些函数有哪些参数都不知道,你也无法正确的调用.
先默认这些函数都是无参数的吧,先试了再说.

#3
xuminxz2021-04-22 09:57
用官网上的sdk包其中应该有说明文档,联系客服应该有帮助。以前做过中新的应用,联系客服给了很详细的说明。

[此贴子已经被作者于2021-4-22 10:03编辑过]

#4
jsddx2021-04-22 09:59
回复 2楼 厨师王德榜
谢谢,有文档
只有本站会员才能查看附件,请 登录
#5
jsddx2021-04-22 10:00
回复 3楼 xuminxz
谢谢
#6
瓜瓜19902021-04-22 10:19
参考他们网站上对应型号读卡器的开发包里的函数说明,用declare命令声明链接库的函数,调用函数读取信息
函数调用流程
初始化->卡认证->读卡->函数取信息->关闭连接


[此贴子已经被作者于2021-4-22 10:20编辑过]

#7
吹水佬2021-04-22 11:32
按SDK使用手册说的试试
假设DLL文件在默认路径
程序代码:

CLEAR
CLEAR ALL
cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)

#DEFINE COM1    1
#DEFINE COM2    2
#DEFINE COM3    3
#DEFINE COM4    4
#DEFINE USB1    1001
#DEFINE USB2    1002
#DEFINE USB3    1003
#DEFINE USB4    1004

DECLARE LONG CVR_InitComm      IN termb.dll LONG             && 初始化连接
DECLARE LONG CVR_Authenticate  IN termb.dll                  && 卡认证
DECLARE LONG CVR_Read_Content  IN termb.dll LONG             && 读卡操作
DECLARE LONG CVR_CloseComm     IN termb.dll                  && 关闭连接;
DECLARE LONG CVR_GetSAMID      IN termb.dll STRING@          && 得到安全模块号
DECLARE LONG GetPeopleName     IN termb.dll STRING@,LONG@    && 得到姓名信息   
DECLARE LONG GetPeopleSex      IN termb.dll STRING@,LONG@    && 得到性别信息   
DECLARE LONG GetPeopleNation   IN termb.dll STRING@,LONG@    && 得到民族信息   
DECLARE LONG GetPeopleBirthday IN termb.dll STRING@,LONG@    && 得到出生日期   
DECLARE LONG GetPeopleAddress  IN termb.dll STRING@,LONG@    && 得到地址信息   
DECLARE LONG GetPeopleIDCode   IN termb.dll STRING@,LONG@    && 身份证号信息
DECLARE LONG GetDepartment     IN termb.dll STRING@,LONG@    && 得到发证机关信息
DECLARE LONG GetStartDate      IN termb.dll STRING@,LONG@    && 得到有效开始日期   
DECLARE LONG GetEndDate        IN termb.dll STRING@,LONG@    && 得到有效截止日期

ret = CVR_InitComm(USB1)    && 假设用USB1口连接设备
IF ret != 1
    ? IIF(ret==0, "动态库加载失败", "端口打开失败")
    *RETURN
ENDIF

ret = CVR_Authenticate()
IF ret != 1
    ? ICASE(ret==2,"寻卡失败", ret==3,"选卡失败", "初始化失败")
    *RETURN
ENDIF

ret = CVR_Read_Content(0)
IF ret != 1
    ? IIF(ret==0, "错误", "异常")
    *RETURN
ENDIF

cBuf = SPACE(256)
nLen = 0

GetPeopleName(@cBuf, @nLen)
? "姓名", LEFT(cBuf, nLen)
GetPeopleSex(@cBuf, @nLen)
? "性别", LEFT(cBuf, nLen)
GetPeopleNation(@cBuf, @nLen)
? "民族", LEFT(cBuf, nLen)
GetPeopleBirthday(@cBuf, @nLen)
? "出生日期", LEFT(cBuf, nLen)
GetPeopleAddress(@cBuf, @nLen)
? "地址", LEFT(cBuf, nLen)
GetPeopleIDCode(@cBuf, @nLen)
? "卡号", LEFT(cBuf, nLen)
GetDepartment(@cBuf, @nLen)
? "发证机关", LEFT(cBuf, nLen)
GetStartDate(@cBuf, @nLen)
? "有效开始日期", LEFT(cBuf, nLen)
GetEndDate(@cBuf, @nLen)
? "有效截止日期", LEFT(cBuf, nLen)

** 或者读 wz.txt
**    张红叶
**    女
**    汉
**    1988-11-18
**    河北省邯郸市临漳县称勾镇称勾东村复兴路25号
**    130423198811184328
**    临漳县公安局
**    2011.03.30-2021.03.30

IF ALINES(arr,FILETOSTR("wz.txt")) < 8
    ? "wz.txt 文件无效"
ENDIF

? "姓名", arr[1]
? "性别", arr[2]
? "民族", arr[3]
? "出生日期", arr[4]
? "地址", arr[5]
? "卡号", arr[6]
? "发证机关", arr[7]
? "有效日期", arr[8]

CVR_CloseComm()

#8
radiofan2021-04-22 11:45
以下是引用吹水佬在2021-4-22 11:32:16的发言:

按SDK使用手册说的试试
假设DLL文件在默认路径

CLEAR
CLEAR ALL
cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)

#DEFINE COM1    1
#DEFINE COM2    2
#DEFINE COM3    3
#DEFINE COM4    4
#DEFINE USB1    1001
#DEFINE USB2    1002
#DEFINE USB3    1003
#DEFINE USB4    1004

DECLARE LONG CVR_InitComm      IN termb.dll LONG             && 初始化连接
DECLARE LONG CVR_Authenticate  IN termb.dll                  && 卡认证
DECLARE LONG CVR_Read_Content  IN termb.dll LONG             && 读卡操作
DECLARE LONG CVR_CloseComm     IN termb.dll                  && 关闭连接;
DECLARE LONG CVR_GetSAMID      IN termb.dll STRING@          && 得到安全模块号
DECLARE LONG GetPeopleName     IN termb.dll STRING@,LONG@    && 得到姓名信息   
DECLARE LONG GetPeopleSex      IN termb.dll STRING@,LONG@    && 得到性别信息   
DECLARE LONG GetPeopleNation   IN termb.dll STRING@,LONG@    && 得到民族信息   
DECLARE LONG GetPeopleBirthday IN termb.dll STRING@,LONG@    && 得到出生日期   
DECLARE LONG GetPeopleAddress  IN termb.dll STRING@,LONG@    && 得到地址信息   
DECLARE LONG GetPeopleIDCode   IN termb.dll STRING@,LONG@    && 身份证号信息
DECLARE LONG GetDepartment     IN termb.dll STRING@,LONG@    && 得到发证机关信息
DECLARE LONG GetStartDate      IN termb.dll STRING@,LONG@    && 得到有效开始日期   
DECLARE LONG GetEndDate        IN termb.dll STRING@,LONG@    && 得到有效截止日期

ret = CVR_InitComm(USB1)    && 假设用USB1口连接设备
IF ret != 1
    ? IIF(ret==0, "动态库加载失败", "端口打开失败")
    *RETURN
ENDIF

ret = CVR_Authenticate()
IF ret != 1
    ? ICASE(ret==2,"寻卡失败", ret==3,"选卡失败", "初始化失败")
    *RETURN
ENDIF

ret = CVR_Read_Content(0)
IF ret != 1
    ? IIF(ret==0, "错误", "异常")
    *RETURN
ENDIF

cBuf = SPACE(256)
nLen = 0

GetPeopleName(@cBuf, @nLen)
? "姓名", LEFT(cBuf, nLen)
GetPeopleSex(@cBuf, @nLen)
? "性别", LEFT(cBuf, nLen)
GetPeopleNation(@cBuf, @nLen)
? "民族", LEFT(cBuf, nLen)
GetPeopleBirthday(@cBuf, @nLen)
? "出生日期", LEFT(cBuf, nLen)
GetPeopleAddress(@cBuf, @nLen)
? "地址", LEFT(cBuf, nLen)
GetPeopleIDCode(@cBuf, @nLen)
? "卡号", LEFT(cBuf, nLen)
GetDepartment(@cBuf, @nLen)
? "发证机关", LEFT(cBuf, nLen)
GetStartDate(@cBuf, @nLen)
? "有效开始日期", LEFT(cBuf, nLen)
GetEndDate(@cBuf, @nLen)
? "有效截止日期", LEFT(cBuf, nLen)

** 或者读 wz.txt
**    张红叶
**    女
**    汉
**    1988-11-18
**    河北省邯郸市临漳县称勾镇称勾东村复兴路25号
**    130423198811184328
**    临漳县公安局
**    2011.03.30-2021.03.30

IF ALINES(arr,FILETOSTR("wz.txt")) < 8
    ? "wz.txt 文件无效"
ENDIF

? "姓名", arr[1]
? "性别", arr[2]
? "民族", arr[3]
? "出生日期", arr[4]
? "地址", arr[5]
? "卡号", arr[6]
? "发证机关", arr[7]
? "有效日期", arr[8]

CVR_CloseComm()

#9
schtg2021-04-22 16:40
@吹水版主,高!
#10
wangjiayu452021-04-25 11:32
我有写好了的华视读卡程序
#11
jsddx2021-04-27 09:36
回复 7楼 吹水佬
谢谢,上周出差几天,没及时看消息。我来试一试
1