读取身份证信息。代码求解。

zhangzhen_927116 2013-09-24 04:11:34
unit Main_U;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OBThread, jpeg, StdCtrls, ExtCtrls,IDCardClass_U,Unit1;

type
TIDCardRead_F = class(TForm)
img_Cover: TImage;
obthrd_ReadID: TOBThread;
lbl_Info: TLabel;
lbl_Con: TLabel;
BtnGlyph_Read: TImage;
BtnGlyph_UnRead: TImage;
ID_Addr: TLabel;
ID_Birth: TLabel;
ID_Depart: TLabel;
ID_ID: TLabel;
ID_Name: TLabel;
ID_Nation: TLabel;
ID_NewAddr: TLabel;
ID_Sex: TLabel;
ID_Time: TLabel;
Image_XP: TImage;
ImageClose: TImage;
ImageMin: TImage;
edt1: TEdit;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ImageCloseClick(Sender: TObject);
procedure obthrd_ReadIDExecute(Sender: TObject; params: Pointer);
procedure BtnGlyph_ReadClick(Sender: TObject);
procedure BtnGlyph_UnReadClick(Sender: TObject);
procedure ImageMinClick(Sender: TObject);
procedure img_CoverMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
UsbOrCom: string;
Port,pucSn,puiCHMsgLen,puiPHMsgLen: integer;
StartReadID,PortEnable: Boolean;
IDCard: TIDCard;
procedure ReadIDCard();//读身份证
{ Private declarations }
public
{ Public declarations }
end;

var
IDCardRead_F: TIDCardRead_F;

implementation
uses IDCardDll_U ;
{$R *.dfm}

procedure TIDCardRead_F.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
IDCard.Destroy;
StartReadID:= False;
if PortEnable then
SDT_ClosePort(Port);
end;

procedure TIDCardRead_F.FormCreate(Sender: TObject);
begin
IDCard:= TIDCard.Create;
PortEnable:= OpenUsbPort(Port);
if PortEnable then
begin
UsbOrCom:= 'U';//连接的类型是通过Usb端口
lbl_Con.Caption:= '连接类型:USB口连接';
lbl_Con.Font.Color:= clGreen;
end
else begin
PortEnable:= OPenComPort(Port);
if PortEnable then
begin
UsbOrCom:= 'C' ; //连接的类型是通过Com端口
lbl_Con.Caption:= '连接类型:串口连接';
lbl_Con.Font.Color:= clGreen;
end
else begin
UsbOrCom:='';
lbl_Con.Caption:= '连接类型:端口错误导致未连接';
lbl_Con.Font.Color:= clRed;
end;
end;
if not PortEnable then
BtnGlyph_Read.Enabled:= False;
StartReadID:= True;
if (StartReadID) and (PortEnable) then
BtnGlyph_ReadClick(nil);
end;

procedure TIDCardRead_F.ImageCloseClick(Sender: TObject);
begin
Close;
end;

procedure TIDCardRead_F.ReadIDCard;
var
iRet : integer;
begin

while (PortEnable) and (StartReadID) do
begin
Sleep(1000);
iRet:= SDT_StartFindIDCard(Port, pucSn, 1); //查卡
if iRet = 159 then
iRet:= SDT_SelectIDCard(Port,pucSn,1) //选卡
else Continue;
if iRet= 144 then
begin
puiCHMsgLen:=0;
puiPHMsgLen:=0;
iRet:= SDT_ReadBaseMsgToFile(1001, 'wz.txt',puiCHMsgLen, 'zp.wlt',puiPHMsgLen,1); //存储文件
end
else Continue;
if iRet =144 then
begin
UsbOrCom:='U';//连接的类型是通过Usb端口
if UsbOrCom ='U' then
iRet := GetBmp('zp.wlt',2)
else if UsbOrCom='C' then //如果连接的类型是Com端口
iRet := GetBmp('zp.wlt',1);

if iRet=1 then
begin
Image_XP.Picture.LoadFromFile('zp.bmp');
IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt');
ID_Name.Caption:= IDCard.Name;
ID_Sex.Caption:= IDCard.Sex_CName;
ID_Nation.Caption:= IDCard.NATION_CName;
ID_Birth.Caption:= IDCard.BIRTH;
ID_Addr.Caption:= IDCard.ADDRESS;
ID_ID.Caption:= IDCard.IDC;
ID_Depart.Caption:= IDCard.REGORG;
ID_Time.Caption:= IDCard.STARTDATE +'-'+IDCard.ENDDATE;
DeleteFile('zp.bmp');
DeleteFile('wz.txt');

if ID_ID.Caption='522121198804017412' then
begin
StartReadID:= False;
form1.Show;
end;

end
else Continue;
end;
end;
end;

procedure TIDCardRead_F.obthrd_ReadIDExecute(Sender: TObject;
params: Pointer);
begin
ReadIDCard ;
end;

procedure TIDCardRead_F.BtnGlyph_ReadClick(Sender: TObject);
begin
StartReadID:= True;
BtnGlyph_Read.Visible:= False;
BtnGlyph_UnRead.Visible:= True;
obthrd_ReadID.Execute(nil);
end;

procedure TIDCardRead_F.BtnGlyph_UnReadClick(Sender: TObject);
begin
BtnGlyph_Read.Visible:= True;
BtnGlyph_UnRead.Visible:= False;
StartReadID:= False;

end;

procedure TIDCardRead_F.ImageMinClick(Sender: TObject);
begin
IDCardRead_F.WindowState:= wsMinimized;
end;

procedure TIDCardRead_F.img_CoverMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if ssleft in shift then
Releasecapture;
perform(WM_SYSCOMMAND,$F012,0);
end;

end.

想知道在
    iRet:= SDT_ReadBaseMsgToFile(1001, 'wz.txt',puiCHMsgLen, 'zp.wlt',puiPHMsgLen,1); //存储文件

这句是上面意思。具体是干什么的。我在自己电脑使用好好的。但是移到别的电脑就出现问题了。只显示图片其他信息都不显示了。下面我附上其他类的代码。都是网上下载的
这是程序下载地址http://www.2ccc.com/article.asp?articleid=5998
...全文
528 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzhen_927116 2013-09-25
  • 打赏
  • 举报
回复

  while (PortEnable) and (StartReadID) do
  begin
    Sleep(1000);
    iRet:= SDT_StartFindIDCard(Port, pucSn, 1); //查卡
    if iRet = 159 then
      iRet:= SDT_SelectIDCard(Port,pucSn,1) //选卡
    else Continue;
    if iRet= 144 then
    begin
      puiCHMsgLen:=0;
      puiPHMsgLen:=0;
      iRet:= SDT_ReadBaseMsgToFile(1001, 'C:\wz.txt',puiCHMsgLen, 'C:\zp.wlt',puiPHMsgLen,1); //存储文件
    end
    else Continue;
    if iRet =144 then
    begin
      UsbOrCom:='U';//连接的类型是通过Usb端口
      if UsbOrCom ='U' then
        iRet := GetBmp('C:\zp.wlt',2)
      else if UsbOrCom='C' then //如果连接的类型是Com端口
        iRet := GetBmp('C:\zp.wlt',1);

      if iRet=1 then
      begin
        img_XP.Picture.LoadFromFile('C:\zp.bmp');
        IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'C:\wz.txt');
        lblID_Name.Caption:= IDCard.Name;
        lblID_Sex.Caption:= IDCard.Sex_CName;
        lblID_Nation.Caption:= IDCard.NATION_CName;
        lblID_Birth.Caption:= IDCard.BIRTH;
        lblID_Addr.Caption:= IDCard.ADDRESS;
        lblID_ID.Caption:= IDCard.IDC;
        lblID_Depart.Caption:= IDCard.REGORG;
        lblID_Time.Caption:= IDCard.STARTDATE +'-'+IDCard.ENDDATE;
        DeleteFile('C:\zp.bmp');
        DeleteFile('C:\wz.txt');
      end
      else Continue;
    end;
  end;
zhangzhen_927116 2013-09-25
  • 打赏
  • 举报
回复
引用 7 楼 gxgyj 的回复:
文件时生成了。但是是生成在桌面。 iRet:= SDT_ReadBaseMsgToFile(1001, 'wz.txt',puiCHMsgLen, 'zp.wlt',puiPHMsgLen,1); //存储文件 Image_XP.Picture.LoadFromFile('zp.bmp'); IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt'); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 那你可以在SDT_ReadBaseMsgToFile时,把路径写到里面比如(放在C:\aa\) iRet:= SDT_ReadBaseMsgToFile(1001, 'c:\aa\wz.txt',puiCHMsgLen, 'c:\aa\zp.wlt',puiPHMsgLen,1); //存储文件 Image_XP.Picture.LoadFromFile('c:\aa\zp.bmp'); IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'c:\aa\wz.txt'); 你前面说的只有图片没有文字信息,因为SDT_ReadBaseMsgToFile之后,把文字信息放在了wz.txt文件中,而后面的 IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt')是在当前目录下去找wz.txt文件(这时你的wz.txt文件在桌面),自然找不到wz.txt文件 所有你最好指定路径
意思是说,在上面存放地址时,应该把文件存放在程序下。就是APPLECATION.EXENAME下?指定路径去是吗?
gxgyj 2013-09-25
  • 打赏
  • 举报
回复
文件时生成了。但是是生成在桌面。 iRet:= SDT_ReadBaseMsgToFile(1001, 'wz.txt',puiCHMsgLen, 'zp.wlt',puiPHMsgLen,1); //存储文件 Image_XP.Picture.LoadFromFile('zp.bmp'); IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt'); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 那你可以在SDT_ReadBaseMsgToFile时,把路径写到里面比如(放在C:\aa\) iRet:= SDT_ReadBaseMsgToFile(1001, 'c:\aa\wz.txt',puiCHMsgLen, 'c:\aa\zp.wlt',puiPHMsgLen,1); //存储文件 Image_XP.Picture.LoadFromFile('c:\aa\zp.bmp'); IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'c:\aa\wz.txt'); 你前面说的只有图片没有文字信息,因为SDT_ReadBaseMsgToFile之后,把文字信息放在了wz.txt文件中,而后面的 IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt')是在当前目录下去找wz.txt文件(这时你的wz.txt文件在桌面),自然找不到wz.txt文件 所有你最好指定路径
zhangzhen_927116 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 gxgyj 的回复:
在iRet:= SDT_ReadBaseMsgToFile(),之后先中断,看看有没有生成wz.txt和zp.wlt 我在自己电脑使用好好的。但是移到别的电脑就出现问题了  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 源代码IDCardDll_U中定义的Zsdtapi.dll接口,可能别人的Zsdtapi.dll文件与你电脑上的Zsdtapi.dll文件不是同一个,或者别人电脑中有多个Zsdtapi.dll文件,定义时指向了不对的Zsdtapi.dll文件 建议在代码中IDCardDll_U.pas文件中指定dll文件的部分修改为指定位置(比如指定为当前exe文件所在目录dll下) implementation function SDT_OpenPort; external 'Zsdtapi.dll'; function SDT_ClosePort; external 'Zsdtapi.dll'; ....  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ implementation function SDT_OpenPort; external '.\dll\Zsdtapi.dll'; function SDT_ClosePort; external '.\dll\Zsdtapi.dll'; ....
文件时生成了。但是是生成在桌面。这个不知道是什么问题。至于后面您说的。我先测试下。再看看。终于有人帮我了解这个东西了。。头都大了
gxgyj 2013-09-25
  • 打赏
  • 举报
回复
在iRet:= SDT_ReadBaseMsgToFile(),之后先中断,看看有没有生成wz.txt和zp.wlt 我在自己电脑使用好好的。但是移到别的电脑就出现问题了  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 源代码IDCardDll_U中定义的Zsdtapi.dll接口,可能别人的Zsdtapi.dll文件与你电脑上的Zsdtapi.dll文件不是同一个,或者别人电脑中有多个Zsdtapi.dll文件,定义时指向了不对的Zsdtapi.dll文件 建议在代码中IDCardDll_U.pas文件中指定dll文件的部分修改为指定位置(比如指定为当前exe文件所在目录dll下) implementation function SDT_OpenPort; external 'Zsdtapi.dll'; function SDT_ClosePort; external 'Zsdtapi.dll'; ....  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ implementation function SDT_OpenPort; external '.\dll\Zsdtapi.dll'; function SDT_ClosePort; external '.\dll\Zsdtapi.dll'; ....
zhangzhen_927116 2013-09-25
  • 打赏
  • 举报
回复
来个大神,教教我这个是怎么实现的。怎么个运行法。好让我找到时哪里有问题。
zhangzhen_927116 2013-09-25
  • 打赏
  • 举报
回复
引用 2 楼 lwcvod 的回复:
买个读卡器,对应的会有SDK的
现在问题是有些电脑可以读取有些不可以。只读取一个图片出来。其他不读取了。所以就像问问造成这种结果的原因是上面。好对应的坐下修改
lu仙深 2013-09-24
  • 打赏
  • 举报
回复
买个读卡器,对应的会有SDK的
zhangzhen_927116 2013-09-24
  • 打赏
  • 举报
回复
同样的代码。在别的电脑上面只读取图片出来。还在桌面创建两个文件 一个是zp.bmp另外一个是wz.txt 到底是哪里出错了?谁能帮我看看。

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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