現在のボーレート機能SDT_GETCOMBAUD(iPORT:Integer; puibaudrate:pinteger):integer; stdcall; external'sdtapi.dll '; {iport [in]は、ポートを表します。通常のシリアルポートスペシャルレート、リターン値0x90サクセス、0x1ポートの開口部の失敗/ポート番号は違法であり、0x5はsam_vのボーレートを取得できず、シリアルポートは利用できません。 }
SAM_VシリアルポートSDT_STETCOMBAUD(iPORT:INTEGER; UICURRBAUD:INTEGER; UISETBAUD:INTEGER)のボーレート関数を設定します。 APIを変更するには、SAM_Vとの以前に設定されたサービス端末通信のボーレート(115200)は115200、57600、378400、19200、9600です。 uicurrbaud値がこれらの値のいずれかでない場合、関数は0x21を返します。関数は0x02を返し、APIへの呼び出しを設定できないことを示します。 uisetbaudによって設定されるSAM_Vボーレートは、これらの値と同じです、0x1ポートの開口部/ポート番号は違法であり、0x2-Timeout、設定は成功しません、0x21-uicurrbaudとuisetbaudの入力パラメーターは間違っています}
オープンシリアルポート/USB関数SDT_OPENPORT(IPORT:INTEGER):integer; stdcall; external'sdtapi.dll '; {iport [in]はポート番号を表します。 )はUSBポート、デフォルトのUSBデバイスポートは1001です。関数返品0x90-ポートが正常に開かれ、1-ポートが故障します /ポート番号は違法です}
シリアルポート/USBFunction SDT_CLOSEPORT(iPORT:INTEGER):integer; stdcall; external'sdtapi.dll '; {iport [in]はポート番号を示します。 }
sdt_resetsam(iport:integer; ilfopen:integer):integer; stdcall; external'sdtapi.dll '; {iport [in]は、現在16のシリアルポートとUSBサポート、シリアルポートのみを表しています。 、USB:1001-1016。 ilfopenは、シリアルポートがcoshingしていないことを意味します。値0x90-成功、その他の障害}
RFアダプター関数の通信バイトの最大数を設定しましたsdt_setmaxrfbyte(iport:integer; ucbyte:char; blfopen:integer):integer; stdcall; stdcall; reternation'sdtapi.dll '; {iport [in]はポート番号、ucbyte [in]を表します。 ]は署名されていない文字、24-255は、RFアダプターの通信バイトの最大数を表します。
SAM_V SDT_GETSAMSTATUS(iport:integer; ilfopen:integer)でステータス検出機能を実行する:integer; 0x60 -selfはチェックに失敗し、コマンドを受け取ることができず、その他 - コマンドが失敗しました}
SAM_V機能の数を読む数、16バイト、返品値0x90-成功、その他 - 失敗しました}
SAM_V関数SDT_GETSAMIDTOSTR(IPORT:INTEGER; PCSAMID:PBYTE; ILFOPEN:INTEGER):integer; stdcall; external'sdtapi.dll '; {iport [in]は、ポート番号、プッサミド[out] sam_v、ilfopene [in] integer、sdt_resetsam return値0x90を参照 - 成功、その他 - 失敗しました}
カード機能を探し始めましたsdt_startfindidcard(iport:integer; pucmanainfo:pbyte; ilfopen:integer):integer; stdcall; external'sdtapi.dll '; {iport [in]を示します。カードチップ管理番号、4バイト、ilfopen [in] sdt_resetam return value 0x9f-card検索を正常に参照してください。 external'sdtapi.dll '; {iport [in]は、ポート番号、pucmanamsg [out] unsignedポインター、証明書/カードチップシリアル番号、8バイト、ilfopen [in] sdt_resetsam return value 0x90-card選択の成功、0x81-を示します。カードの選択が失敗しました}
カード管理番号機能sdt_readmnginfo(iport:integer; pucmanagemsg:pbyte; ilfopen:integer):integer; stdcall; external'sdtapi.dll '; {iport [in]は、ポート番号、pucmanagemsgを表します[in]管理番号、28バイト、ilfopen [in] return値0x90-成功、その他 - 読み取り失敗}
証明書/カードの修正情報機能sdt_readbasemsg(iport:integer; pucchmsg:pbyte; puichmsglen:pinteger; pucphmsg:pbyte; puiphmsglen:pinteger; ilfopen:integer):integer; stdcall;ポート番号を表し、pucchmsgが読み取りテキスト情報を指し、puichmsglenが読み取りテキスト情報の長さを指しますpucphmsgは読み取り写真情報を指し、puiphmsglen [out]は読み取り写真情報の長さを指します。 ilfopen [in] sdt_resetsam return値0x90を参照 - 固定情報を正常に読み取り、他の読み取り固定情報が失敗しました}
追加情報機能sdt_readnewappmsg(iport:integer; pucappmsg:pbyte; pbyiappmsglen:pinteger; ilfopen:integer):integer ;; stdcall; enttdtapi.dll '; {iport [in]は、ポート数を示す、およびpucappmsg [out]追加情報を読むことを指し、puiappmsglen [out]は読み取り情報の長さを指します。
写真デコード関数関数getBmp(wlt_file:pchar、intf:integer):integer; stdcall; external'wltrs.dll '; {wlt_file-wltファイル名、intf読み取りデバイス通信インターフェイスタイプ(1-RS-232C、2-USB)戻り値:生成 *.bmpおよび次の返品情報:1-photoデコードが正しい、0コールエラーSdtapi.dllを呼び出し、-1-photoデコードはエラー、-2-wltファイルサフィックスエラー、-3-wltファイルの開きエラー、-4 -wltファイル形式エラー、-5ソフトウェアが承認されていない、-6デバイス接続エラー}
ソースコード:
ユニットidreader; interfaceusessutils、windows、forms、udatabase; constdll_sdtapi = 'sdtapi.dll'; dll_wltrs = 'wltrs.dll'; //プロンプトメッセージtip_title = 'prompt'; 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 =' ID関連情報は見つかりませんでした。 '; TIP_ICREADER_SAVE_SUCCESS ='正常に保存すると、身元情報がローカルデータベースに自動的に入力されました! '; tip_icreader_black_card_found ='ブラックリストに含まれる人が見つかりました! '; error_icreader_open_port ='ポートが開くことができませんでした。対応するポートを確認するか、カードリーダーを再接続してください! '; typetidcardinfo = packed recordname:widecharの配列[0..14] sex:array [0..0] of widechar; nation:array [0..1] of widechar; Birthday:Array [0..7] of widechar; addr:widecharの配列[0..34] widechar; idsn:widecharの配列[0..17] of issoorgan:array [0..14] of widechar; vaildbegin:array [0..7] of widechar ; vaildend:widecharの配列[0..34] :Integer) ard(iportid:integer; var puciin:整数:integer)整数) :integer dll_sdtapi 'sdt_readbasemsg'; _sdtapi名 ' 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:integer; pucsn:integer; puichmsglen:integer; puiphmsglen:integer:fs:tfileStream; // result:= false; busbport:= false; edziifopen:= 1; edziportid:= 0; puichmsglen:= 0; puiphmsglen:= 0; // USBポートのマシン接続を検出する必要があります。 = 1001〜1016 dobeginintopenportrtn:= sdt_openport(iport); intopenportrtn = 144 thenbeginedziportid:= iport; busbport:= true; break; end; //シリアルポートのデバイス接続の検出1〜2 dobeginintopenportrtn:= sdt_openport(iport); intopenportrtn = 144 thenbeginedziportid:= iport; busbport:= false; end; end; end; intopenportrtn <> 144 thenbegin // appool.messagebox(エラー_open_port、earr_open_port、earr_pertbox( aerrmsg:= error_icreader_open_port; result:= false; exit; end; //カードiret:= sdt_startfindidcard(edziportid、puciin、edziifopen); iret <> 159 thenbeginiret:= sdt_startfindidcard(edziportid、puciifopen、puciifopen、edziifopen、edziportid、edziportid、edziportid( IRET <> 159 thenbeginsdt_closeport(edziportid); // application.messagebox(tip_icreader_no_card、tip_title); aerrmsg:= tip_icreader_no_card; result:= exit; end; 、pucsn、edziifopen); iret <> 144 thenbeginiret:= sdt_selectidcard(edziportid、pucsn、edziifopen); _failed; result := false; exit; end; end; //ここでは、ユーザーはアプリケーションの現在のディレクトリに許可を読み取りおよび書き込み、fileexists( 'wz.txt')then sysutils.deletefile( 'wz.txt' ); fileexists( 'zp.bmp')の場合、sysutils.deletefile( 'zp.bmp'); if fileexists( 'zp.wlt')sysutils.deletefile( 'zp.wlt'); str))iRet:= sdt_readbasemsgtofile(edziportid、pansichar( 'wz.txt'))、puichmsglen、pansichar(ans -sistring( 'zp.wlt'))、puiphmsglen、1); ; // application.messagebox(tip_icreader_read_failed、tip_title); aerrmsg:= tip_icreader_read_failed; result; exit; end; cディスクのルートディレクトリのメーカー、busbport theniret:= getBmp(ansistring( 'zp.wlt'))、2)elseiret:= getBmp(ansistring( 'zp.wlt' ' )、1); case iret of0:beginapplication.messagebox(tip_icreader_call_dll_failed、tip_title);失敗した、tip_title); end; -3:beginapplication.messagebox(tip_icreader_wlt_file_open_failed、tip_title); -4:beginapplication.messagebox(tip_icreader_wlt_file_format_failed); le); end; -6 :beginapplication.messagebox(tip_icreader_device_failed、tip_title); end; sdt_closeport(edziportid); acardinfo) ; //民族:EthnicNotoname(ansistring(idcardinfo.nation)); //出生月と日付:formatdatestr(ansistring(idcardinfo.birthday)); //アドレス:アドレス:=トリム(ansistring(idcardinfo.addr))) ; // id番号:id:= trim(ansistring(idcardinfo.idsn));//certificate asseam:= trim(ansistring(idcardinfo.issueorgan)); // fee begin begin validdatestart:= formatdatestr(ansistring(ansistring) idcardinfo.vaildbegin))); //料金日付のif trim(ansistring(idcardinfo.vaildend))= 'long-dateend:= formatdateTime(' yyy-mm-dd '、maxdateTime)// else // // validDateEnd:= formatdatestr(ansistring(idcardinfo.vaildend); ' +' = ' +' mongol '); add('03' + '=' + 'hui people'); add('04 ' +' = ' +'チベタンの人々 '); add('05' + ' = ' +' uyghur people '); add('06' + '=' + 'miao people'); add('07 ' +' = ' +' yi people '); add('08' + '=' + 'zhuang people'); add('09 ' +' = ' +' buyi people '); add(' 10 ' +' = ' +' korean '); add('11' + '=' + 'manchu '); add('12' + '=' + 'dong'); add('13 ' +' = ' +' yao people '); add('14' + '=' + 'bai people'); add('15 ' +' = ' +' tujia people '); add('16' + '=' + 'hani people'); add('17 ' +' = ' +' kazakhs '); add(' ' 18 ' +' = ' +' dai people '); add('19' + '=' + 'li people'); add('20 ' +' = ' +' lisu people '); add('21' + '=' + 'wa people'); add('22 ' +' = ' +' he people '); add(' 23 ' +' = ' +' High Mountain Tribe '); add('24' + '=' + 'lahu tribe'); add('25 ' +' = ' +' aqua tribe '); add('26' + '=' + 'dongxiang people'); add('27 ' +' = ' +' naxi people '); add('28' + '=' + 'jingpo people'); add('29 ' +' = ' +' kirgiz '); add('30' + '=' + ' tu '); add('31' + '=' + 'dahan'); add('32 ' +' = ' +' mullao '); add('33' + '=' + 'qiang'); add ( '34' + '=' + 'brown'); add('35 ' +' = ' +' salar tribe '); add('36' + '=' + 'maonan tribe'); add('37 ' +' = ' +' gelao tribe '); add('38' + '=' + 'xibe tribe'); add('39 ' +' = ' +' achang tribe '); add('40' + ' + '=' + 'pumi tribe'); add('41 ' +' = ' +' tajik tribe '); add('42' + '=' + 'nur tribe'); add('43 ' +' = '= ' +' uzbek tribe '); add('44' + '=' + 'ロシアの部族'); add( '45' + '=' + 'ewenki'); add('46 ' +' = ' +' de'ang '); add('47' + '=' + 'baoan'); add('48 ' +' = ' +' yugu tribe '); add('49' + '=' + 'jing tribe '); add('50' + '=' + 'Tatar Tribe'); add('51 ' +' = ' +' dulong clan '); add('52' + '=' + 'oqqen clan')) ; add('53 ' +' = ' +' hezhe clan '); add('54' + '=' + 'menba'); add('55 ' +' = ' +' luba '); add(' 56 ' +' = ' +' kino '); add('57' + '=' + 'others'); add('98 ' +' = ' +' foreign naturalization '); end; finalizationlstethnic.free; end; end; end; .///Sdtapi.dll wltrs.dll wltrs.licを事前に準備し、同じディレクトリに入れてください