麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

二代身份證讀卡器接口函數Delphi聲明

2019-11-06 08:21:27
字體:
來源:轉載
供稿:網友

查看串口當前波特率function SDT_GetCOMBaud(iport: integer; puiBaudRate: Pinteger): integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口,puiBaudRate[out]無符號指針,指向普通串口當前波特率,返回值0X90-成功,0x1-端口打開失敗/端口號不合法,0x5無法獲得SAM_V的波特率,串口不可用。}

設置SAM_V的串口的波特率function SDT_StetCOMBaud(iPort: integer; uiCurrBaud: integer; uiSetBaud: integer): integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口, uiCurrBaud[in]調用改API前已設置的業務終端與SAM_V通信的波特率(出廠默認為115200)uiCurrBaud只能為115200,57600,378400,19200,9600。如果uiCurrBaud數值不是這些值之一,函數返回0x21,如果和已設置的不一樣,函數返回0x02表示不能設置調用API不成功。uiSetBaud[in]將要設置的SAM_V波特率,只能為(同上)那些值,如果不是這些數值,返回也同上函數返回0x90-成功,0x1-端口打開失敗/端口號不合法,0x2-超時,設置不成功,0x21-uiCurrBaud、uiSetBaud輸入參數數值錯誤}

打開串口/USBfunction SDT_OpenPort(iPort: integer): integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,1-16(十進制)為串口,1001-1016(十進制)為USB口,缺省的一個USB設備端口是1001。函數返回0x90-打開端口成功,1-打開端口失敗/端口號不合法}

關閉串口/USBfunction SDT_ClosePort(iPort: integer): integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,返回值0x90-關閉串口成功,0x01-端口號不合法}

對SAM_V復位function SDT_ResetSAM(iPort: integer; ilfOpen: integer): integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,目前串口和USB只支持16個,串口:0001-0016,USB:1001-1016。ilfOpen[in]表示不在該函數內部打開和關閉串口,非0表示在API函數內部包含了打開串口和關閉串口函數,之前不需要調用SDT_OpenPort和SDT_ClosePort返回值0x90-成功,其他 失敗}

設置射頻適配器最大通信字節數function SDT_SetMaxRFByte(iPort: integer;ucByte: Char;blfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,ucByte[in]無符號字符,24-255,表示射頻適配器最大通信字節數,ilfOpen[in]參見SDT_ResetSAM返回值0x90-成功,其他-失敗}

對SAM_V進行狀態檢測function SDT_GetSAMStatus(iPort: integer;ilfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,ilfOpen參見SDT_ResetSAM返回值0x90-SAM_V正常,0x60-自檢失敗,不能接收命令,其他-命令失敗}

讀取SAM_V的編號function SDT_GetSAMID(iPort: integer;pusSAMID: Pbyte;ilfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,pusSAMID[out]無符號字符串指針SAM_V編號,16字節,返回值0x90-成功,其他-失敗}

讀取SAM_V的編號function SDT_GetSAMIDToStr(iPort: integer;pcSAMID: Pbyte;ilfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iport[in]表示端口號,pusSAMID[out]SAM_V編號,ilfOpen[in]整數,參見SDT_ResetSAM返回值0x90-成功,其他-失敗}

開始找卡function SDT_StartFindIDCard(iPort: integer;pucManaInfo: Pbyte; ilfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iport[in]表示端口號,pucManaInfo[out]無符號指針,證/卡芯片管理號,4個字節,ilfOpen[in]參見SDT_ResetSAM返回值0x9f-找卡成功,0x80-找卡失敗}選卡function SDT_SelectIDCard(iPort: integer;pucManaMsg: Pbyte;ilfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,pucManaMsg[out]無符號指針,證/卡芯片序列號,8個字節,ilfOpen[in]參見SDT_ResetSAM返回值0x90-選卡成功,0x81-選卡失敗}

讀取卡體管理號function SDT_ReadMngInfo(iPort: integer;pucManageMsg: Pbyte;ilfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,pucManageMsg[out]無符號字符指針,卡體管理號,28字節,ilfOpen[in]返回值0x90-成功,其他-讀失敗}

讀取證/卡固定信息function SDT_ReadBaseMsg(iPort: integer;pucCHMsg: Pbyte;puiCHMsgLen: Pinteger;pucPHMsg: Pbyte;puiPHMsgLen: Pinteger;ilfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,pucCHMsg[out]指向讀到的文字信息,puiCHMsgLen[out]指向讀到的文字信息長度pucPHMsg[out]指向讀到的照片信息,puiPHMsgLen[out]指向讀到的照片信息長度,ilfOpen[in]參見SDT_ResetSAM返回值0x90-讀固定信息成功,其他讀固定信息失敗}

讀取追加信息function SDT_ReadNewAppMsg(iPort: integer;pucAppMsg: Pbyte;puiAppMsgLen: Pinteger;ilfOpen: integer):integer;;stdcall;External'SDTAPI.DLL';{iPort[in]表示端口號,pucAppMsg[out]指向讀到的追加信息,puiAppMsgLen[out]指向讀到的追加信息長度,ilfOpen[in]參見SDT_ResetSAM返回值0x90-讀取追加信息成功,其他-讀取追加信息失敗}

照片解碼函數function GetBmp(Wlt_File: PChar,intf: integer):integer;stdcall;External'WltRS.dll';{Wlt_File-wlt文件名,intf閱讀設備通訊接口類型(1-RS-232C,2-USB)返回值:生成*.bmp和以下返回信息:1-相片解碼正確,0-調用sdtapi.dll錯誤,-1-相片解碼錯誤,-2-wlt文件后綴錯誤,-3-wlt文件打開錯誤,-4-wlt文件格式錯誤,-5-軟件未授權,-6-設備連接錯誤}

源代碼:

unit IdReader;interfaceusesSysUtils,Windows,Forms,uDatabase;constDLL_SDTAPI = 'sdtapi.dll';DLL_WLTRS = 'WltRS.dll';//提示信息TIP_TITLE = '提示';TIP_ICREADER_NO_CARD = '未放卡或者卡未放好,請重新放卡!';TIP_ICREADER_READ_FAILED = '讀卡失??!';TIP_ICREADER_CALL_DLL_FAILED = '調用sdtapi.dll錯誤!';TIP_ICREADER_PICTURE_DECODE_FAILED = '相片解碼錯誤!';TIP_ICREADER_WLT_FILE_EXTEND_FAILED = 'wlt文件后綴錯誤!';TIP_ICREADER_WLT_FILE_OPEN_FAILED = 'wlt文件打開錯誤!';TIP_ICREADER_WLT_FILE_FORMAT_FAILED = 'wlt文件格式錯誤!';TIP_ICREADER_NO_LICENSE = '軟件未授權!';TIP_ICREADER_DEVICE_FAILED = '設備連接錯誤!';TIP_PRINT_NO_CARD_FOUND = '未找到身份證相關信息,請將證件放在天線上后重試!';TIP_ICREADER_SAVE_SUCCESS = '保存成功,身份信息已自動錄入本地數據庫!';TIP_ICREADER_BLACK_CARD_FOUND = '發現黑名單內包括的人員!';ERROR_ICREADER_OPEN_PORT = '端口打開失敗,請檢測相應的端口或者重新連接讀卡器!';typeTIdCardInfo = packed recordName: array[0..14] of WideChar;Sex : array[0..0] of WideChar;Nation: array[0..1] of WideChar;BirthDay:array[0..7] of WideChar;Addr : array[0..34] of WideChar;IdSN : array[0..17] of WideChar;IssueOrgan: array[0..14] of WideChar;VaildBegin: array[0..7] of WideChar;VaildEnd : array[0..7] of WideChar;theNewestAddr: array[0..34] of WideChar;end;function SDT_OpenPort(iPortID: Integer): Integer; stdcall; external DLL_SDTAPI name 'SDT_OpenPort';function SDT_ClosePort(iPortID: Integer): Integer; stdcall; external DLL_SDTAPI name 'SDT_ClosePort';function SDT_StartFindIDCard(iPortID: Integer; var pucIIN: Integer; iIfOpen: Integer): Integer; stdcall; external DLL_SDTAPI name 'SDT_StartFindIDCard';function SDT_SelectIDCard(iPortID: Integer; var pucIIN: Integer; iIfOpen: Integer): Integer; stdcall; external DLL_SDTAPI name 'SDT_SelectIDCard';function SDT_ReadBaseMsg(iPortID: Integer; pucCHMsg: PAnsiChar; var puiCHMsgLen: Integer; pucPHMsg: PAnsiChar; var puiPHMsgLen: Integer; iIfOpen: Integer): Integer; stdcall; external DLL_SDTAPI name 'SDT_ReadBaseMsg';function SDT_ReadBaseMsgToFile(iPortID: Integer; fileName1: PAnsiChar; var puiCHMsgLen: Integer; fileName2: PAnsiChar; var puiPHMsgLen: Integer; iIfOpen: Integer): Integer; stdcall; external DLL_SDTAPI name 'SDT_ReadBaseMsgToFile';function GetBmp(file_name: PAnsiChar; intf: Integer): Integer; stdcall; external DLL_WLTRS name 'GetBmp';function ReadICCard(var ACardInfo: TCardInfo; var AErrMsg: string): Boolean;implementationusesClasses, Dialogs, uResource;varLstEthnic: TStrings;function EthnicNoToName(ANo: string): string;beginResult:= LstEthnic.Values[ANo];end;function FormatDateStr(AValue: string): string;beginResult:= Copy(AValue, 1, 4) + '-' +Copy(AValue, 5, 2) + '-' +Copy(AValue, 7, 2);end;function ReadICCard(var ACardInfo: TIdCardInfo; var AErrMsg: string): Boolean;variPort: Integer;intOpenPortRtn: Integer;bUsbPort: Boolean;EdziPortID: Integer;iRet: Integer;pucIIN: Integer;EdziIfOpen: Integer;pucSN: Integer;puiCHMsgLen: Integer;puiPHMsgLen: Integer;fs: TFileStream;idCardInfo:TIdCardInfo;//FileHandle: Integer;beginAErrMsg:= '';//Result:= False;bUsbPort:= False;EdziIfOpen:= 1;EdziPortID:= 0;puiCHMsgLen:= 0;puiPHMsgLen:= 0;//檢測usb口的機具連接,必須先檢測usbfor iPort := 1001 to 1016 dobeginintOpenPortRtn:= SDT_OpenPort(iPort);if intOpenPortRtn = 144 thenbeginEdziPortID:= iPort;bUsbPort:= true;break;end;end;//檢測串口的機具連接if not bUsbPort thenbeginfor iPort := 1 to 2 dobeginintOpenPortRtn:= SDT_OpenPort(iPort);if intOpenPortRtn = 144 thenbeginEdziPortID:= iPort;bUsbPort:= False;Break;end;end;end;if intOpenPortRtn <> 144 thenbegin//application.MessageBox(ERROR_ICREADER_OPEN_PORT, ERROR_TITLE);AErrMsg:= ERROR_ICREADER_OPEN_PORT;Result:= False;Exit;end;//下面找卡iRet:= SDT_StartFindIDCard(EdziPortID, pucIIN, EdziIfOpen);if iRet <> 159 thenbeginiRet:= SDT_StartFindIDCard(EdziPortID, pucIIN, EdziIfOpen);//再找卡if iRet <> 159 thenbeginSDT_ClosePort(EdziPortID);//Application.MessageBox(TIP_ICREADER_NO_CARD, TIP_TITLE);AErrMsg:= TIP_ICREADER_NO_CARD;Result:= False;Exit;end;end;//選卡iRet:= SDT_SelectIDCard(EdziPortID, pucSN, EdziIfOpen);if iRet <> 144 thenbeginiRet:= SDT_SelectIDCard(EdziPortID, pucSN, EdziIfOpen);if iRet <> 144 thenbeginSDT_ClosePort(EdziPortID);//Application.MessageBox(TIP_ICREADER_READ_FAILED, TIP_TITLE);AErrMsg:= TIP_ICREADER_READ_FAILED;Result:= False;Exit;end;end;//注意,在這里,用戶必須有應用程序當前目錄的讀寫權限if FileExists('wz.txt') then SysUtils.DeleteFile('wz.txt');if FileExists('zp.bmp') then SysUtils.DeleteFile('zp.bmp');if FileExists('zp.wlt') then SysUtils.DeleteFile('zp.wlt');//PAnsiChar(AnsiString(Str))iRet:= SDT_ReadBaseMsgToFile(EdziPortID, PAnsiChar(AnsiString('wz.txt')), puiCHMsgLen, PAnsiChar(AnsiString('zp.wlt')), puiPHMsgLen, 1);if iRet <> 144 thenbeginSDT_ClosePort(EdziPortID);//Application.MessageBox(TIP_ICREADER_READ_FAILED, TIP_TITLE);AErrMsg:= TIP_ICREADER_READ_FAILED;Result:= False;Exit;end;//下面解析照片,注意,如果在C盤根目錄下沒有機具廠商的授權文件Termb.Lic,照片解析將會失敗if bUsbPort theniRet:= GetBmp(PAnsiChar(AnsiString('zp.wlt')), 2)elseiRet:= GetBmp(PAnsiChar(AnsiString('zp.wlt')), 1);case iRet of0:beginApplication.MessageBox(TIP_ICREADER_CALL_DLL_FAILED, TIP_TITLE);end;1: //正常beginend;-1:beginApplication.MessageBox(TIP_ICREADER_PICTURE_DECODE_FAILED, TIP_TITLE);end;-2:beginApplication.MessageBox(TIP_ICREADER_WLT_FILE_EXTEND_FAILED, TIP_TITLE);end;-3:beginApplication.MessageBox(TIP_ICREADER_WLT_FILE_OPEN_FAILED, TIP_TITLE);end;-4:beginApplication.MessageBox(TIP_ICREADER_WLT_FILE_FORMAT_FAILED, TIP_TITLE);end;-5:beginApplication.MessageBox(TIP_ICREADER_NO_LICENSE, TIP_TITLE);end;-6:beginApplication.MessageBox(TIP_ICREADER_DEVICE_FAILED, TIP_TITLE);end;end;SDT_ClosePort(EdziPortID);fs:= TFileStream.Create('wz.txt', fmOpenRead);fs.Position:= 0;fs.Read(ACardInfo ,SizeOf(ACardInfo));fs.Free;//// 姓名 :AnsiString(idCardInfo.Name);// 性別 : if AnsiString(idCardInfo.Sex)= '1' then 性別:= '男' else 性別:= '女';// 民族 : EthnicNoToName(AnsiString(idCardInfo.Nation));// 出生年月日: FormatDateStr(AnsiString(idCardInfo.BirthDay));// 住址: Address:= Trim(AnsiString(idCardInfo.Addr));//身份證號碼: Id:= Trim(AnsiString(idCardInfo.IdSN));//發證機構: Place:= Trim(AnsiString(idCardInfo.IssueOrgan));//有效日期開始 ValidDateStart:= FormatDateStr(AnsiString(idCardInfo.VaildBegin));//有效日期結束 if Trim(AnsiString(idCardInfo.VaildEnd)) = '長期' then// ValidDateEnd:= FormatDateTime('yyyy-MM-dd', MaxDateTime)// else// ValidDateEnd:= FormatDateStr(AnsiString(idCardInfo.VaildEnd));//Result:= True;end;initializationLstEthnic:= TStringList.Create;with LstEthnic dobeginAdd('01' + '=' + '漢族');Add('02' + '=' + '蒙古族');Add('03' + '=' + '回族');Add('04' + '=' + '藏族');Add('05' + '=' + '維吾爾族');Add('06' + '=' + '苗族');Add('07' + '=' + '彝族');Add('08' + '=' + '壯族');Add('09' + '=' + '布依族');Add('10' + '=' + '朝鮮族');Add('11' + '=' + '滿族');Add('12' + '=' + '侗族');Add('13' + '=' + '瑤族');Add('14' + '=' + '白族');Add('15' + '=' + '土家族');Add('16' + '=' + '哈尼族');Add('17' + '=' + '哈薩克族');Add('18' + '=' + '傣族');Add('19' + '=' + '黎族');Add('20' + '=' + '傈僳族');Add('21' + '=' + '佤族');Add('22' + '=' + '畬族');Add('23' + '=' + '高山族');Add('24' + '=' + '拉祜族');Add('25' + '=' + '水族');Add('26' + '=' + '東鄉族');Add('27' + '=' + '納西族');Add('28' + '=' + '景頗族');Add('29' + '=' + '柯爾克孜族');Add('30' + '=' + '土族');Add('31' + '=' + '達翰爾族');Add('32' + '=' + '仫佬族');Add('33' + '=' + '羌族');Add('34' + '=' + '布朗族');Add('35' + '=' + '撒拉族');Add('36' + '=' + '毛南族');Add('37' + '=' + '仡佬族');Add('38' + '=' + '錫伯族');Add('39' + '=' + '阿昌族');Add('40' + '=' + '普米族');Add('41' + '=' + '塔吉克族');Add('42' + '=' + '怒族');Add('43' + '=' + '烏孜別克族');Add('44' + '=' + '俄羅斯族');Add('45' + '=' + '鄂溫克族');Add('46' + '=' + '德昂族');Add('47' + '=' + '保安族');Add('48' + '=' + '裕固族');Add('49' + '=' + '京族');Add('50' + '=' + '塔塔爾族');Add('51' + '=' + '獨龍族');Add('52' + '=' + '鄂倫春族');Add('53' + '=' + '赫哲族');Add('54' + '=' + '門巴族');Add('55' + '=' + '珞巴族');Add('56' + '=' + '基諾族');Add('57' + '=' + '其它');Add('98' + '=' + '外國人入籍');end;finalizationLstEthnic.Free;end.//事先請準備好sdtapi.dll WltRS.dll WltRS.lic 這三個文件,放在同目錄下


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: www.99av| 一区二区国产在线 | 成年人黄色免费网站 | 欧美视频在线观看一区 | 一级黄色免费大片 | 天天草天天干天天 | 干色视频 | 午夜视频免费播放 | 久久新网址 | 欧美成人精品一区二区男人小说 | 狠狠久久 | 中文字幕综合 | 国产乱淫av一区二区三区 | 看免费av| 毛片一级片 | 日日操操| 蜜桃av鲁一鲁一鲁一鲁 | 国产精品久久久久久久hd | 欧美精品一区二区久久 | 成人在线观看小视频 | 成人在线观看一区二区 | 久久久久久久久久综合 | 一级全毛片 | 精品一区二区三区免费毛片爱 | 视频一区 在线 | 欧美乱淫| 成人免费福利视频 | 国产一区二区三区精品在线观看 | 中文在线观看视频 | 国产免费一区二区三区网站免费 | 欧美日韩在线视频一区 | 久久久久久亚洲国产精品 | 亚洲成人在线视频网站 | 成人免费观看av | 黄色网址免费入口 | 久草最新 | 国产中出视频 | 黄色羞羞视频在线观看 | 性插视频 | 午夜精品久久久久久中宇 | 国产免费观看视频 |