Periksa fungsi baud rate saat ini sdt_getcombaud (iPort: integer; puibaudrate: pinteger): integer; stdcall; eksternal'sdtapi.dll '; {iPort [dalam] mewakili port, puibaudrate [out] pointer tanpa tanda, menunjuk ke gelombang saat ini dari saat ini dari saat ini Tingkat khusus port serial normal, nilai pengembalian 0x90-success, pembukaan 0x1-port gagal/nomor port adalah ilegal, 0x5 tidak dapat memperoleh laju baud SAM_V, dan port serial tidak tersedia. }
Atur fungsi baud rate dari port serial SAM_V SDT_STETCOMBAUD (iPort: integer; uicurrbaud: integer; uisetbaud: integer): integer; stdcall; external'sdtapi.dll '; {iPort [in] berarti pelabuhan, uicurrbaud [dalam] Untuk mengubah API, laju baud dari komunikasi terminal layanan yang ditetapkan sebelumnya dengan SAM_V (default pabrik adalah 115200). Jika nilai UICURRBAUD bukan salah satu dari nilai -nilai ini, fungsi mengembalikan 0x21. Sam_v Baud Rate yang akan ditetapkan oleh Uisetbaud [dalam] hanya dapat digunakan untuk nilai-nilai tersebut (sama seperti di atas). Jika nilai-nilai ini tidak digunakan, pengembalian juga akan sama seperti fungsi di atas , 0x1-port pembukaan gagal/Nomor port adalah ilegal, 0x2-timeout, pengaturan tidak berhasil, parameter input 0x21-Uicurrbaud dan Uisetbaud salah}
Open Serial Port/Fungsi USB SDT_OPENPORT (iPort: integer): integer; stdcall; external'sdtapi.dll '; {iPort [in] mewakili nomor port, 1-16 (desimal) adalah port serial, 1001-1016 (desimal ) adalah port USB, port perangkat USB default adalah 1001. Fungsi Mengembalikan 0x90 - Port berhasil dibuka, 1 - Port gagal / Nomor port ilegal}
Tutup port serial/USBFunction sdt_closeport (iPort: integer): integer; stdcall; external'sdtapi.dll '; {iPort [dalam] menunjukkan nomor port, nilai pengembalian 0x90-tertutup port serial dengan sukses, nomor 0x01-port adalah ilegal ilegal dengan berhasil, 0x01-port adalah ilegal ilegal. }
Reset fungsi sdt_resetsam (iPort: integer; ilfopen: integer): integer; stdcall; external'sdtapi.dll '; {iPort [dalam] mewakili nomor port. , USB: 1001-1016. Ilfopen [dalam] berarti bahwa port serial tidak dibuka dan ditutup dalam fungsi. Nilai 0x90 - Sukses, Kegagalan Lainnya}
Atur jumlah maksimum byte komunikasi dari fungsi adaptor RF sdt_setmaxrfbyte (iPort: integer; ucbyte: char; blfopen: integer): integer; stdcall; eksternal'sdtapi.dll '; {iPort [in] mewakili nomor port, ucbyte [di dalam ] adalah karakter yang tidak ditandatangani, 24-255, mewakili jumlah maksimum byte komunikasi dari adaptor RF, ilfopen [dalam] lihat nilai pengembalian sdt_resetam 0x90-success, failure lainnya}
Lakukan Fungsi Deteksi Status pada SAM_V SDT_GETSAMSTATUS (iPort: integer; ilfopen: integer): integer; 0x60 -self gagal memeriksa, tidak dapat menerima perintah, lainnya - perintah gagal}
Baca jumlah fungsi sam_v sdt_getsamid (iPort: integer; pussamid: pbyte; ilfopen: integer): integer; stdcall; eksternal'sdtapi.dll '; {iPort [di] Nomor, 16 byte, nilai pengembalian 0x90 - Sukses, Lainnya - Gagal}
Baca jumlah fungsi sam_v sdt_getsamidtoStr (iPort: integer; pcsamid: pbyte; ilfopen: integer): integer; stdcall; external'sdtapi.dll '; {iPort [dalam] berarti nomor port, nomor sam_v sam_v, [Dalam] integer, lihat nilai pengembalian sdt_resetsam 0x90 - berhasil, lainnya - gagal}
Start looking for card function SDT_StartFindIDCard(iPort: integer;pucManaInfo: Pbyte; ilfOpen: integer):integer;stdcall;External'SDTAPI.DLL';{iport[in] indicates the port number, pucManaInfo[out] unsigned pointer, certificate/ card Chip management number, 4 bytes, ilfOpen[in] see SDT_ResetSAM return value 0x9f-Card search successfully, 0x80-Card search failed} card selection function SDT_SelectIDCard(iPort: integer;pucManaMsg: Pbyte;ilfOpen: integer):integer;stdcall ; External'Sdtapi.dll '; {iPort [in] menunjukkan nomor port, pucmanamsg [out] pointer yang tidak ditandatangani, Nomor Seri Sertifikat/Kartu, 8 byte, ilfopen [di] Lihat SDT_RESETSAM Nilai Pengembalian 0x90-card SUCCECED, 0x81- Pemilihan kartu gagal}
Baca Fungsi Nomor Manajemen Kartu SDT_READMNGINFO (iPort: integer; pucmanagemsg: pbyte; ilfopen: integer): integer; stdcall; eksternal'sdtapi.dll '; {iPort [in] mewakili nomor port, pucmanagemsg [out] pointer yang tidak ditandatangani, iPort [in] Nomor manajemen, 28 byte, ilfopen [dalam] nilai pengembalian 0x90 - berhasil, lainnya - baca gagal}
Baca Sertifikat/Kartu Fungsi Informasi Tetap sdt_readbasemsg (iPort: integer; pucchmsg: pbyte; puichmsglen: Pinteger; pucphmsg: pbyte; puiphmsglen: pinteger; ilfopen: integer): integer; stdcall; eksternal; mewakili nomor port, pucchmsg [out] menunjuk ke informasi teks yang dibaca, puichmsglen menunjuk ke pucphmsg informasi teks yang dibaca pucphmsg [out] ke informasi foto yang dibaca, puiphmsglen [out] menunjuk ke panjang informasi foto yang dibaca, ilfopen [di] Lihat SDT_RESETSAM Nilai pengembalian 0x90 - Baca informasi tetap berhasil, informasi tetap membaca lainnya gagal}
Baca Fungsi Informasi Tambahan SDT_READNEWAppMSG (iPort: Integer; pucappmsg: pbyte; puiAppmsglen: Pinteger; ilfopen: integer): integer ;; stdcall; pUC External'sdtapi.dll '; {iPort [di] menunjukkan nomor port, dan pucpi) [out] [iPort [di] menunjukkan nomor port, dan pUC] [out] [out] [oUpapping] [oUpapping] [IPORT [IN] menunjukkan nomor port, dan pUC] [out] [out] [out] [oUppor] Menunjuk ke informasi tambahan yang dibaca, puiappmsglen [out] menunjuk ke panjang informasi tambahan, ilfopen [di] Lihat SDT_RESETSAM Nilai pengembalian 0x90 - Informasi tambahan yang dibaca berhasil, lainnya - informasi tambahan yang dibaca gagal}
Foto fungsi decoding fungsi getBmp (wlt_file: pchar, intf: integer): integer; stdcall; external'wltrs.dll '; {wlt_file-wlt nama, tipe antarmuka komunikasi perangkat intf (1-rs-232c, 2-USB) Nilai Pengembalian: Hasilkan *.BMP dan Informasi Pengembalian berikut: 1-Foto Decoding adalah benar, 0-panggilan kesalahan dalam memanggil sdtapi.dll, -1-foto decoding adalah kesalahan, -2-wlt kesalahan sufiks, -3-wlt Kesalahan Pembukaan File, -Kesalahan Format File 4 -WLT, -5 -Software Tidak diotorisasi, -6 -Device Koneksi Kesalahan}
Kode Sumber:
Unit Idreader; InterfaceUsessySutils, Windows, Forms, Udatabase; constdll_sdtapi = 'sdtapi.dll'; dll_wltrs = 'wltrs.dll'; // pesan prompt Tip_title = 'prompt'; Tip_icreader_no_card = 'no or card = the card no piring'; Tip_icreader_no_card = 'no or card = the no no card = the in no no no orcard =' no orcard = 'no orcard =' no orcard = 'no orcard =' no orcard = 'no orcard =' no orcard = 'no orcard =' no orcard = 'no orcard =' no orcard = , ganti kartu! '; TIP_ICREADER_READ_FAILED =' Membaca kartu gagal! '; TIP_ICREADER_CALL_DLL_FAILED =' Panggilan kesalahan panggilan sdtapi.dll! '; TIP_ICREADER_PICTURE_DECODE_FAILED =' Foto decoding error! '; TIP_ICREADER_WLT_FILE_EXTEND_FAILED =' WLT File Kesalahan Suffix! '; TIP_ICREADER_WLT_FILE_OPEN_FAILED =' Kesalahan pembukaan file WLT! '; TIP_ICREADER_WLT_FILE_FORMAT_FAILED =' Format file WLT salah! '; Tip_icreader_no_license =' Perangkat lunak tidak diizinkan! '; TIP_ICREADER_DEVICE_FAILED =' Kesalahan koneksi perangkat! '; Tip_print_no_card_found =' Tidak ada informasi terkait kartu ID. '; TIP_ICREADER_SAVE_SUCCESS =' Simpan dengan sukses, informasi identitas telah secara otomatis dimasukkan ke dalam database lokal! '; Tip_icreader_black_card_found =' Orang -orang yang termasuk dalam daftar hitam ditemukan! '; Error_icreader_open_port =' Port telah gagal, silakan periksa port yang sesuai atau sambungkan kembali pembaca kartu! '; TypetidCardInfo = RecordName yang dikemas: Array [0..14] dari Widechar; Sex: Array [0..0] dari Widechar; Nation: Array [0..1] dari Widechar; Ulang Tahun: Array [0..7] dari widechar; addr: array [0..34] dari widechar; idsn: array [0..17] dari widechar; ed isu- edite: array [0..14] dari widechar; vaildbegin: array [0..7] dari widechar ; Vaildend: Array [0..7] dari Widechar; Integer): Stdcall; IDCard (iPortID: Integer; var pUciin: integer; iifopen: integer): integer; : Bilangan bulat) Integer; Stdcall; Nama DLL_SDTAPI ' SDT_READBASEMSGTOFILE '; fungsi getBMP (File_name: PANSICHAR; Intf: Integer): Integer : Tstrings; function ethnicnotoname (ano: string): string; beginResult: = lstethnic.values [ano]; end; function formatDateStr (avalue: string): string; startResult: = copy (avalue, 1, 4) + '-' + Salin (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: fs: tfilestream; idcardinfo: tidcardinfo; fs: tfileStream; idcardinfo: tidcardinfo; // Hasil: = false; Busbport: = false; edziifopen: = 1; edziportid: = 0; puichmsglen: = 0; puiphmsglen: = 0; // Mendeteksi koneksi mesin port USB, Anda harus terlebih dahulu mendeteksi USBFor iPort: = 1001 hingga 1016 Dobeginintopenportrtn: = sdt_openport (iPort); jika intopengortrtn = 144 Thenbeginedziportid: = iPort; Busbport: = true; break; end; // Deteksi perangkat pelabuhan berantai jika tidak Busbport kemudian BBEGINFFOR IPORT: = 1 hingga 2 dobeginintopenportrtn: = sdt_openport (iPort); jika intopenportrtn = 144 thenbegedziportid: = iPort; Busbport: = false; break; end; end; end; jika intopenportrtn <> 144 thenbegin // application. AERRMSG: = error_icreader_open_port; hasil: = false; keluar; end; // cari iret kartu: = sdt_startfindidcard (edziportid, puciin, edziifopen); edzipard (edziportid, edzin, puciin, = sdt_starten); edzin (edziport, edzin, edziNDcard (edziND, = sdt_starten; Cari kartu jika IRET <> 159 thenbeginsdt_closeport (edziportid); // application.messageBox (tip_icreader_no_card, tip_title); aerrmsg: = Tip_icreader_no_card; Hasil: = false; exit; end; end; end; // sfect card_no_card; hasil: = false; ikuti; end; end; // select card_no_card; hasil: = false; exit; end; end; end; // cardeReader_no_card; , pucsn, edziifopen); jika iret <> 144 thenbeginiret: = sdt_selectidcard (edziportid, pucsn, edziifopen); jika iret <> 144 thenbeginsdt_closeport (edziportid); // application Eader_read_failed; hasilnya : = False; keluar; end; end; // Perhatikan bahwa di sini, pengguna harus memiliki izin membaca dan menulis ke direktori aplikasi saat ini jika fileexists ('wz.txt') kemudian 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); jika iret <> 144 lalu kemudian begin ' ;. Produsen di direktori root disk C, resolusi foto akan gagal jika 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) akhir; 1: // Beginend Normal; -1: TippoxBox (Tip_ICreader_Picture_Decode_Failed, tipsage (TipeCreader_picture_decode_failed, tipsage); Extend_failed , Tip_title); end; -3: begined application.messageBox (tip_icreader_wlt_file_open_failed, tip_title); end; -4: begined application.messageBox (tip_icreader_wlt_file_format_failed, TIP_TITLE (TIPREADER_WLT_FILE_Format _Title); end; -6 : beginApplication.messageBox (tip_icreader_device_failed, tip_title); end; end; sdt_closeport (edziportid); Acardinfo)); fs.free; //// name: ansistring (idcardinfo.name); // gender: jika ansistring (idcardinfo.sex) = '1' lalu jenis kelamin: = 'laki -laki' lain jenis kelamin: = 'wanita' ;. ; // Nomor ID: ID: = trim (ansistring (idcardinfo.idsn));//agen penerbit sertifikat: tempat: = trim (ansistring (idcardinfo.issueorgan)); // tanggal biaya mulai validdatestArt: = formatDateStr (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (ansistring (format IDCardInfo.vaildbegin)); // Tanggal biaya akhir jika trim (ansistring (idcardInfo.vaildend)) = 'jangka panjang' lalu // validdateend: = formatDateTime ('yyy-mm-dd', maxDateTime) // else // ValidDateEnd: = FormatDateString (ansistring (idcardinfo.vaildend)); // hasil: = true; end; ' +' = ' +' Mongol '); add ('03' + '=' + 'hui people'); add ('04 ' +' = ' +' orang tibet '); add ('05' + ' = ' +' Uyghur People '); add ('06' + '=' + 'miao people'); add ('07 ' +' = ' +' yi people '); add ('08' + '=' + 'Zhuang People'); add ('09 ' +' = ' +' Buyi People '); add (' 10 ' +' = ' +' Korea '); add ('11' + '=' + 'Manchu '); Add ('12' + '=' + 'dong'); add ('13 ' +' = ' +' Yao People '); add ('14' + '=' + 'Bai People'); Tambah ('15 ' +' = ' +' Tujia People '); add ('16' + '=' + 'Hani People'); add ('17 ' +' = ' +' Kazakh '); add (' 18 ' +' = ' +' dai people '); add ('19' + '=' + 'li people'); add ('20 ' +' = ' +' lisu people '); add ('21' + '=' + 'Wa people'); add ('22 ' +' = ' +' She People '); add (' 23 ' +' = ' +' High Mountain Tribe '); add ('24' + '=' + 'Suku Lahu'); add ('25 ' +' = ' +' Aqua Tribe '); add ('26' + '=' + 'dongxiang orang'); add ('27 ' +' = ' +' Naxi people '); add ('28' + '=' + 'Jingpo People'); add ('29 ' +' = ' +' Kirgiz '); add ('30' + '=' + ' Tu '); add ('31' + '=' + 'dahan'); add ('32 ' +' = ' +' Mullao '); add ('33' + '=' + 'qiang'); tambahkan ('34' + '=' + 'Brown'); add ('35 ' +' = ' +' Salar Tribe '); add ('36' + '=' + 'Tribe Maonan'); 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 ' +' = ' +' Suku Uzbek '); add ('44' + '=' + 'suku Rusia'); 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' + '=' + 'orang lain'); add ('98 ' +' = ' +' Naturalisasi Asing '); end; finalizationLstethnic.free; end end; .//Please Siapkan sdtapi.dll wltrs.dll wltrs.lic terlebih dahulu, masukkan ke dalam direktori yang sama