| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2283 人关注过本帖
标题:vfp读身份证阅读器,合成正反面照片问题?
只看楼主 加入收藏
laoshiren78
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-5-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
vfp读身份证阅读器,合成正反面照片问题?
已用论坛上的代码把身份证信息读出来了,只是不知道正反面合成照片怎么弄,望指教。
这是厂家给的原型:
    型4:int ReadBaseInfosPhoto( char * Name, char * Gender, char * Folk,char *BirthDay, char * Code, char * Address,char *Agency, char * ExpireStart,char* ExpireEnd,char * directory)
    明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息以字符串格式输出。图象信息被解码后存为照片photo.bmp和photo.jpg,身份证正面反面合成图片card.jpg(在directory指定目录下)。
    数:
Name    [out] 字符型指针,指向姓名信息。需要在调用时分配内存,字节数不小31。
Gender    [out] 字符型指针,指向性别信息(男或者女)。需要在调用时分配内存,字节数不小3。
Folk        [out] 字符型指针,指向民族信息。需要在调用时分配内存,字节数不小10。
BirthDay    [out] 字符型指针,指向出生日期信息。需要在调用时分配内存,字节数不小9,前四位为出生年,第5位到第6位是出生月,后两位是出生日,格式为:CCYYMMDD。
Code    [out] 字符型指针,指向身份证号码信息。需要在调用时分配内存,字节数不小19。
Address    [out] 字符型指针,指向地址信息。需要在调用时分配内存,字节数不小71。
Agency    [out] 字符型指针,指向签证机关信息。需要在调用时分配内存,字节数不小31。
ExpireStart    [out] 字符型指针,指向有效期起始日期信息。需要在调用时分配内存,字节数不小9, 格式为:CCYYMMDD。
ExpireEnd    [out] 字符型指针,指向有效期截至日期信息。需要在调用时分配内存,字节数不小9,格式为:CCYYMMDD,有效期为长期的表示为汉字“长期”。
directory    [in] 字符指针,表示照片存储路径,路径最后有无“\”均可;可以给空值(NULL),表示照片存储在当前目录中,此时函数效果同ReadBaseInfos。

返 回 值:
    意义
1    正确
0    错误
4    目录不存在
-4    缺少dewlt.dll、savephoto.dll等DLL


这是原码:

clear
DECLARE Integer SDT_OpenPort IN sdtapi.dll Integer iPort
DECLARE Integer SDT_ClosePort IN sdtapi.dll Integer iPort
DECLARE Integer SDT_StartFindIDCard IN sdtapi.dll Integer iPort, String @pucManaInfo, Integer iIfOpen
DECLARE Integer SDT_SelectIDCard IN sdtapi.dll Integer iPort, String @pucManaMsg, Integer iIfOpen
DECLARE Integer SDT_ReadBaseMsg IN sdtapi.dll Integer iPort, String @pucCHMsg, Integer @puiCHMsgLen, String @pucPHMsg, Integer @puiPHMsgLen, Integer iIfOpen

LOCAL iRet As Integer && 返回码
LOCAL iPort As Integer && 端口号
LOCAL iIfOpen As Integer && 是否需要打开端口
LOCAL pucManaInfo As String
LOCAL pucManaMsg As String
LOCAL pucCHMsg As String && 文字信息
LOCAL pucPHMsg As String && 照片信息
LOCAL pucFPMsg As String && 指纹信息
LOCAL uiCHMsgLen As Integer, uiPHMsgLen As Integer

iRet = 0
pucManaInfo = SPACE(4)
pucManaMsg = SPACE(8)
pucCHMsg = SPACE(512)
pucPHMsg = SPACE(1024)
pucFPMsg = SPACE(1024)
uiCHMsgLen = 0
uiPHMsgLen = 0
iPort = 1001 && 端口在系统设置下设置 1001为USB 设备
iIfOpen = 0

IF iIfOpen = 0
   iRet = SDT_OpenPort(iPort)
   IF iRet != 0x90
      MESSAGEBOX("SDT_OpenPort 错误, 错误代码为 " + LTRIM(STR(iRet)), 16, '错误')
      SDT_ClosePort(iPort)
      RETURN
   ENDIF
ENDIF

DO WHILE .T. && 找卡
   iRet = SDT_StartFindIDCard(iPort, @pucManaInfo, iIfOpen)
   IF iRet = 0x9f
      iRet = SDT_SelectIDCard(iPort, @pucManaMsg, iIfOpen)
      IF iRet == 0x90
         EXIT
      ENDIF
   ENDIF
   IF MESSAGEBOX("没有找到身份证,请放身份证?", 32 + 4, '询问') <> 6
      EXIT
   ENDIF
ENDDO

iRet = SDT_ReadBaseMsg(iPort, @pucCHMsg, @uiCHMsgLen, @pucPHMsg, @uiPHMsgLen, iIfOpen)
IF iRet != 0x90
   MESSAGEBOX("SDT_ReadBaseMsg 错误, 错误代码为 " + LTRIM(STR(iRet)), 16, '错误')
   IF iIfOpen = 0
      SDT_ClosePort(iPort)
      RETURN
   ENDIF
ENDIF

tmp_read=STRCONV(left(pucCHMsg,uiCHMsgLen),6)
xm_read=ALLTRIM(LEFTC(tmp_read,15)) &&读出的字符串前15位是姓名
xbpd=SUBSTRC(tmp_read,16,1)  &&读出的字符串前16位是性别,1代表男,2代表女
mzpd=SUBSTRC(tmp_read,17,2)  &&读出的字符串前17-18位是民族,01是汉族
tmp_rq=SUBSTRC(tmp_read,19,8) &&读出的字符串前19-25位是出生日期

IF xbpd="1"
   xb_read="男"
ELSE
   xb_read="女"
ENDIF
***********
DO CASE
   CASE mzpd="01"
        mz_read="汉"
ENDCASE
csrq_read=LEFT(tmp_rq,4)+'.'+SUBSTR(tmp_rq,5,2)+'.'+SUBSTR(tmp_rq,7,2)
dz_read=SUBSTRC(tmp_read,27,35)  &&地址的数据
sfzhm_read=SUBSTRC(tmp_read,62,18)  &&身份证号码的数据
qfjg_read=ALLTRIM(SUBSTRC(tmp_read,80,15))  &&签发机关的数据
tmp_rqq=SUBSTRC(tmp_read,95,8)  &&签发日期
tmp_rqz=SUBSTRC(tmp_read,103,8)  &&有限期限
yxqq_read=LEFT(tmp_rqq,4)+'.'+SUBSTR(tmp_rqq,5,2)+'.'+SUBSTR(tmp_rqq,7,2)
yxqz_read=LEFT(tmp_rqz,4)+'.'+SUBSTR(tmp_rqz,5,2)+'.'+SUBSTR(tmp_rqz,7,2)
qtxx_read=RIGHTC(tmp_read,18)  &&其他内容,暂时不知道是什么

*photo_tmp=SYS(5)+SYS(2003)+"\"+ALLTRIM(xm_read)+alltrim(sfzhm_read)+".bmp" &&这里是获得照片的程序
photo_tmp=SYS(5)+SYS(2003)+"\"+ALLTRIM(xm_read)+alltrim(sfzhm_read)+".wlt" &&这里是获得照片的程序
=STRTOFILE(LEFT(pucPHMsg,uiPHMsgLen),photo_tmp)
*kk=Strconv(LEFT(pucPHMsg,uiPHMsgLen),6)
*dd=Strconv(LEFT(pucPHMsg,uiPHMsgLen),5)
*STRTOFILE(dd,photo_tmp)
**************

IF iIfOpen = 0 &&关闭端口
   SDT_ClosePort(iPort)
   clear dlls
   RETURN
ENDIF
clear dlls
搜索更多相关主题的帖子: 身份证 合成照片 阅读器 字符串 图片 
2017-05-02 10:29
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:10 
你都把数据都读出来了,直接使用即可。

楼主需要将照片合成,是什么意思?是不是达到把正反面都扫描成电子版后合成一张照片呀?
2017-05-02 11:43
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:10 
收藏
2017-05-02 14:36
快速回复:vfp读身份证阅读器,合成正反面照片问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017487 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved