身份证阅读器Delphi开发包,支持身份证读取、医保卡读取、身份证物理ID读取功能

版本:
delphi 10.3

调用的读卡库:donsee32.dll

身份证阅读器Delphi开发包,支持身份证读取、医保卡读取、身份证物理ID读取功能_第1张图片 ​​​​​Delphi语言读取效果图

用到的读卡器型号:EST-100R多功能智能卡读写器模组

身份证阅读器Delphi开发包,支持身份证读取、医保卡读取、身份证物理ID读取功能_第2张图片

导入读卡函数

unit Ucard;

interface

type
  PIDINFO=^IDINFO;
  IDINFO = record    //身份证信息结构体
    Name:array[0..39] of AnsiChar;   //中文姓名 40长度
    ENfullname:array[0..39] of AnsiChar;  //英文姓名 40长度
    Sex:array[0..9] of AnsiChar;    //性别 10长度
    people:array[0..19] of AnsiChar; //民族 20长度
    address:array[0..199] of AnsiChar; //地址 200长度
    birthday:array[0..49] of AnsiChar; //出生日期(YYYYMMDD) 50长度
    signdate:array[0..49] of AnsiChar;  //发证日期(YYYYMMDD) 50长度
    validterm:array[0..49] of AnsiChar; //有效日期(YYYYMMDD) 50长度
    number:array[0..39] of AnsiChar; //证件号码 40长度
    organs:array[0..49] of AnsiChar; //发证机关(或外国人永久居住正-当次申请受理机关) 50长度
    Nationality:array[0..199] of AnsiChar; //国籍 200长度
    Photo:array[0..2048] of AnsiChar; //读取二代证电子信息时保存照片数据信息 2049长度
    Other:array[0..199] of AnsiChar; //其他 200长度
    passNu:array[0..23] of AnsiChar;  //通行证号 24长度
    signCount:array[0..7] of AnsiChar; //签发数次 8长度
    certVersion:array[0..7] of AnsiChar; //证件版本 8长度
    certType:array[0..6] of AnsiChar;  //卡片类型:"0"大陆身份证  "I"外国人  "J"港澳台 6长度
    figData:array[0..2048] of AnsiChar;  //指纹信息 2049长度
end;
  PSSCard_IDINFO=^SSCard_IDINFO;
  SSCard_IDINFO=record     //社保卡信息结构体*/
    name:array[0..39] of AnsiChar; //姓名 40长度
    sex:array[0..9] of AnsiChar;//性别 10长度
    nation:array[0..19] of AnsiChar;//民族 20长度
    birthday:array[0..49] of AnsiChar; //出生日期 50长度
    signdate:array[0..49] of AnsiChar;//发证日期(YYYYMMDD 50长度
    validterm:array[0..49] of AnsiChar; //有效日期(YYYYMMDD 50长度
    cardnumber:array[0..39] of AnsiChar;//卡号 40长度
    idnumber:array[0..39] of AnsiChar; //社会保障号码(身份证号) 40长度
    city:array[0..63] of AnsiChar; //*城市代码 64长度
    cardveVrsion:array[0..7] of AnsiChar;//社保卡版本 8长度
    identityCode:array[0..63] of AnsiChar;//卡识别码 64长度
    szTerminalNo:array[0..31] of AnsiChar; //SAM卡识别号 32长度
    Other:array[0..199] of AnsiChar;//其他 200长度
end;

//donsee32.dll API声明 WltRS.dll需和donsee32.dll放同一目录
//打开设备
function Donsee_Open(szDevName: PAnsiChar): Integer; stdcall; far; external 'donsee32.dll' name 'Donsee_Open';

//关闭设备
function Donsee_Close(): Integer; stdcall; far; external 'donsee32.dll' name 'Donsee_Close';

//调用蜂鸣器
function Donsee_Beep(): Integer; stdcall; far; external 'donsee32.dll' name 'Donsee_Beep';

//读取版本号
function Donsee_Version(pszVersion: PAnsiChar): Integer; stdcall; far; external 'donsee32.dll' name 'Donsee_Version';

//读取身份证加照片
function Donsee_ReadIDCard(nType:Integer; szPath:AnsiString; idInfo:PIDINFO; pszMsg:PAnsiChar): Integer; stdcall; far; external 'donsee32.dll' name 'Donsee_ReadIDCard';

//读取身份证ID
function Donsee_ReadIDCardUid(pszUID: PAnsiChar): Integer; stdcall; far; external 'donsee32.dll' name 'Donsee_ReadIDCardUid';

//读取社保卡
function  Donsee_ReadSSCard(nSlotPsam:Integer;cardInfo:PSSCard_IDINFO; arrChMsg:PAnsiChar): Integer; stdcall; far; external 'donsee32.dll' name 'Donsee_ReadSSCard';

implementation

end.

读身份证代码:


procedure TForm1.Button2Click(Sender: TObject);
var
  t_nRe:Integer;
  t_nType:Integer;
  t_szPicPath:PAnsiChar;
  t_arrChMsg:PAnsiChar;
  jpgtem:TJPEGImage;
  AnsiStringtemp:AnsiString;
  sfzCard:IDINFO;
begin
  //读取身份证
  if (IsOpenReader) then
  begin
    t_nRe := 99;
    t_nType := 1; //设置身份证读卡类型:0,文本信息;1,文本 + 照片;2,文本 + 照片 + 指纹,不读指纹读卡速度更快一些!
    t_szPicPath:='IDphoto.jpg'; //定义相片名称
    t_arrChMsg:= AnsiStrAlloc(256); //返回的错误信息

    t_nRe := Donsee_ReadIDCard(t_nType, t_szPicPath, @sfzCard, t_arrChMsg); //注意结构体入参   Donsee_ReadIDCard
    if t_nRe = 0 then
    begin
        Donsee_Beep();
        if (Trim(sfzCard.certType) = 'I') then//外国人永久居留身份证
        begin
            Memo1.Lines.Add('读取成功,证件类型:外国人身份证');

            Memo1.Lines.Add('证件类型标识:' + trim(sfzCard.certType));
            Memo1.Lines.Add('英文姓名:' + Trim(sfzCard.ENfullname));
            Memo1.Lines.Add('性    别:' + sfzCard.sex);
            Memo1.Lines.Add('永久居留证号码:' + sfzCard.number );
            Memo1.Lines.Add('国籍或所在地区代码:' + sfzCard.Nationality);
            Memo1.Lines.Add('中文姓名:'+ sfzCard.name );
            Memo1.Lines.Add('证件签发日期:' + sfzCard.signdate );
            Memo1.Lines.Add('证件终止日期:' + sfzCard.validterm );
            Memo1.Lines.Add('出生日期:' + sfzCard.birthday );
            Memo1.Lines.Add('证件版本号:' + sfzCard.certVersion );
            Memo1.Lines.Add('申请机关代码:' + sfzCard.organs);
            if (t_nType <> 0) then //读取照片加指纹
            begin
                Memo1.Lines.Add('照片原始数据:' + leftstr(sfzCard.Photo,50) + '...');
            end
            //外国人居住证没有指纹数据
        end
        else if (Trim(sfzCard.certType)= 'J') then//港澳台居民居住证
        begin
            Memo1.Lines.Add('读取成功,证件类型:港澳台居住证');
            Memo1.Lines.Add('证件类型标识:' + Trim(sfzCard.certType));
            Memo1.Lines.Add('姓名:' + sfzCard.name);
            Memo1.Lines.Add('性别:' + sfzCard.sex );
            Memo1.Lines.Add('出生日期:' + sfzCard.birthday);
            Memo1.Lines.Add('住址:' + sfzCard.address );
            Memo1.Lines.Add('公民身份号码:' + sfzCard.number );
            Memo1.Lines.Add('签发机关:' + sfzCard.organs);
            Memo1.Lines.Add('有效期起始日期:' + sfzCard.signdate);
            Memo1.Lines.Add('有效期截止日期:' + sfzCard.validterm );
            Memo1.Lines.Add('通行证号码:' + sfzCard.passNu);
            Memo1.Lines.Add('签发次数:' + sfzCard.signCount );
            if (t_nType <> 0) then
            begin
                Memo1.Lines.Add('照片原始数据:' + leftstr(sfzCard.Photo,50) + '...');
            end;
            if (t_nType = 2) then
            begin
                Memo1.Lines.Add('指纹原始数据:' + leftstr(sfzCard.figData,50) + '...');
            end;
        end
        else
        begin
            Memo1.Lines.Add('读取成功,证件类型:居民身份证');
            Memo1.Lines.Add('证件标识:'+ Trim(sfzCard.certType) );
            Memo1.Lines.Add('姓    名:'+ sfzCard.name);
            Memo1.Lines.Add('性    别:'+ sfzCard.sex);
            Memo1.Lines.Add('名    族:'+ sfzCard.people);
            Memo1.Lines.Add('出生日期:'+ sfzCard.birthday);
            Memo1.Lines.Add('住    址:'+ sfzCard.address);
            Memo1.Lines.Add('发证日期:'+ sfzCard.signdate);
            Memo1.Lines.Add('有效日期:'+ sfzCard.validterm);
            Memo1.Lines.Add('证件号码:'+ sfzCard.number);
            Memo1.Lines.Add('发证机关:'+ sfzCard.organs);
            Memo1.Lines.Add('其    他:' +sfzCard.Other);
            if (t_nType <> 0) then
            begin
                Memo1.Lines.Add('照片原始数据:' + leftstr(sfzCard.Photo,50) + '...');

            end;
            if (t_nType = 2)  then
            begin
                Memo1.Lines.Add('指纹原始数据:' + leftstr(sfzCard.figData,50) + '...');
            end;
        end;

        if (t_nType <> 0) then   //显示照片文件
        begin
            jpgtem:=TJPEGImage.Create;
            jpgtem.LoadFromFile(t_szPicPath);
            Image1.Picture.Assign(jpgtem);
            jpgtem.Free;
        end;
    end
    else
    begin
        Memo1.Lines.Add('身份证读取失败:'+ t_arrChMsg + ',返回值:' +inttostr(t_nRe));
    end
  end
  else
  begin
    Memo1.Lines.Add('读卡器连接失败,请先打开设备');
  end;
end;

读社保卡代码:

procedure TForm1.Button7Click(Sender: TObject);
var
   t_nRe:Integer;
   t_arrChMsg: PAnsiChar;
   SSCard:SSCard_IDINFO;
begin
  if IsOpenReader then
  begin
    t_nRe:= 99;
    t_arrChMsg:=AnsiStrAlloc(50);
    //结构体SSCard_IDINFO
    t_nRe:= Donsee_ReadSSCard(17, @SSCard, t_arrChMsg); //注意结构体入参    Donsee_ReadSSCard
    if (t_nRe = 0) then
    begin
        Memo1.Lines.Add('社保卡读取成功,返回值:' + inttostr(t_nRe));
        Memo1.Lines.Add('姓名:' + SSCard.name);
        Memo1.Lines.Add('性别:' + SSCard.sex);
        Memo1.Lines.Add('民族:' + SSCard.nation);
        Memo1.Lines.Add('出生日期:' + SSCard.birthday);
        Memo1.Lines.Add('发证日期:' + SSCard.signdate);;
        Memo1.Lines.Add('有效日期:' + SSCard.validterm );
        Memo1.Lines.Add('卡号:' + SSCard.cardnumber );
        Memo1.Lines.Add('身份证号:' + SSCard.idnumber );
        Memo1.Lines.Add('城市代码:' + SSCard.city );
        Memo1.Lines.Add('社保卡版本:' + SSCard.cardveVrsion );
        Memo1.Lines.Add('卡识别码:' + SSCard.identityCode );
        Memo1.Lines.Add('其他:' + SSCard.Other );
        Donsee_Beep();
    end
    else
    begin
        Memo1.Lines.Add('社保卡读取失败:' + t_arrChMsg + ',返回值:' +inttostr(t_nRe));
    end
  end
  else
  begin
      Memo1.Lines.Add('读卡器连接失败,请先打开设备');
  end;

end;

你可能感兴趣的:(身份证,社保卡,Delphi,SDK)