현재 보드 속도 기능 SDT_GETCOMBAUD (IPORT : Integer; PUIBAUDRATE : PINTEGER) : Integer; StdCall; external 'sdtapi.dll'; {iport [in]은 포트를 나타내며, 푸우 바이트는 [out]를 나타내며, 현재 웨이브를 가리 킵니다. 정상 직렬 포트 특수 요율, 반환 값 0x90-Success, 0x1- 포트 오프닝 실패/포트 번호는 불법이며 0x5는 SAM_V의 BAUD 속도를 얻을 수 없으며 직렬 포트를 사용할 수 없습니다. }
SAM_V SERIAL PORT SDT_STETCOMBAUD (IPORT : Integer; UICurrbAud : Integer; UisetBaud : Integer)의 Baud rate 함수 설정 : 정수; stdcall; exteral'sdtapi.dll '; {iport [in]을 의미합니다. API를 변경하려면 SAM_V와 이전에 설정된 서비스 터미널 커뮤니케이션의 보드 비율을 변경합니다 (Factory Default는 115200, 57600, 378400, 9600입니다. Uicurrbaud 값이 이러한 값 중 하나가 아닌 경우, 함수는 0x21을 반환합니다. UISETBAUD에 의해 설정되는 SAM_V BAUD 요금은 해당 값에 대해서만 사용될 수 있습니다 (이 값이 사용되지 않으면 반환은 0x90-success와 동일합니다 , 0x1- 포트 오프닝 실패/포트 번호는 불법이며 0x2- 시간 초
열린 직렬 포트/USB 기능 SDT_OPENPORT (IPORT : Integer) : 정수; stdCall; external'sdtapi.dll '; {iport [in]은 포트 번호를 나타냅니다. 1-16 (소수)은 일련 포트, 1001-1016입니다. )는 USB 포트이며, 기본 USB 장치 포트는 1001입니다. 함수 반환 0x90- 포트가 성공적으로 열리고, 1- 포트가 실패했거나 포트 번호가 불법입니다}
직렬 포트/USBFunction SDT_CLOSEPORT (IPORT : Integer) : 정수; 정수; stDCall; external'SdTapi.dll '; {iport [in]은 포트 번호, 반환 값 0x90-Closed Serial Port, 0x01- 포트 번호는 불법입니다. }
재설정 함수 sdt_resetsam (iport : integer; ilfopen : integer) : 정수; stdcall; external'sdtapi.dll '; {iport [in]은 현재 16 개의 일련의 포트 및 USB 지원, Serial Ports : 0001-0016을 나타냅니다. , USB : 1001-1016. ILFOPEN [in]은 직렬 포트가 열리지 않고 닫히지 않으면 직렬 포트와 직렬 포트 기능이 API 기능에 포함되어 있음을 의미합니다. 값 0x90- 성공, 기타 실패}
RF 어댑터 함수의 최대 통신 바이트를 설정합니다. ]는 서명되지 않은 문자, 24-255는 RF 어댑터의 최대 통신 바이트 수를 나타냅니다. Ilfopen [in] 참조 SDT_RESETSAM 반환 값 0x90-SUCCESS, 기타-운반} 참조.
SAM_V SDT_GETSAMSTATUS에서 상태 감지 기능 (IPORT : ILFOPEN : INTEGER); 0x60 -self는 확인하지 못하고 명령을받지 못하고 기타 - 명령 실패}
SAM_V 기능 SDT_GETSAMID (iport : Integer; Pussamid : Pbyte; ilfopen : integer) : Integer; integer; stdcall; external'sdtapi.dll '; {iport [in] 숫자, 16 바이트, 반환 값 0x90- 성공, 기타 - 실패}}
SAM_V 기능 SDT_GETSAMIDTOSTR (IPORT : Integer; PCSAMID : PBYTE; ILFOPEN : INTEGER) : Integer; StdCall; external 'sdtapi.dll'; {iport [in]은 포트 번호, pussamid [out] sam_v number, ilfopen을 의미합니다. [] Integer, sdt_resetsam 반환 값 0x90- 성공, 기타 - 실패} 참조}
카드 기능 SDT_STARTFINDIDCARD (IPORT : INTEGER; PUCMANAINFO : PBYTE; ILFOPEN : INTEGER) : Integer; STDCALL; external'SdTapi.dll '; {iport [in]은 포트 번호, Pucmanainfo [Out] 비정상적인 포인터를 나타냅니다. 카드 칩 관리 번호, 4 바이트, ILFOPEN [in] SDT_RESETSAM 리턴 값 0x9F 카드 검색 실패, 0x80 카드 검색 실패} 카드 선택 기능 SDT_SelectIDCard (IPORT : Intger; Pucmanamsg : PBYTE; ILFOPEN : inter) : 정수; Stdcall; external'sdtapi.dll '; {iport [in]은 포트 번호, pucmanamsg [out] Unsigned 포인터, 인증서/카드 칩 일련 번호, 8 바이트, Ilfopen [in]을 나타냅니다. 카드 선택 실패}
카드 관리 번호 기능 SDT_READMNGINFO (IPORT : Integer; PucManagemsg : Pbyte; ilfopen : integer) : Integer; stdcall; external 'sdtapi.dll'; {iport [in]은 포트 번호, pucmanagemsg [out] unsigned 캐릭터 포인터를 나타냅니다. 관리 번호, 28 바이트, ILFOPEN [in] 리턴 값 0x90- 성공, 기타 - 읽기 실패}}
인증서/카드 고정 정보 기능 SDT_READBASEMSG (IPORT : Integer; PucCHMSG : PBYTE; PINTEGER; PUCPHMSG : PBYTE; PIPHMSGLEN : PINTEGLEN : ILFOPEN : INTEGER) : 정수; STDCALL; 외부의 외부 'SDTAPI.DLL'; 포트 번호를 나타내고, pucchmsg [out]가 읽기 텍스트 정보를 가리키고, puichmsglen [out]은 텍스트 정보 길이의 읽기 길이를 가리 킵니다. pucphmsg [out]는 사진 정보 읽기를 가리키고, puiphmsglen [out]가 읽기 사진 정보 길이를 가리 킵니다. ILFOPEN [in] SDT_RESETSAM 반환 값 0x90 참조 - 고정 정보 읽기 성공, 기타 읽기 고정 정보 실패}
추가 정보 기능 읽기 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 참조 - 추가 정보 읽기가 성공적입니다. 추가 정보 읽기 실패}}
사진 디코딩 기능 기능 getBmp (wlt_file : pchar, intf : integer) : 정수; stdcall; external'wltrs.dll '; {wlt_file -wlt 파일 이름, intf 읽기 장치 통신 인터페이스 유형 (1-rs-232c, 2-USB) 반품 값 : 생성 *.BMP 및 다음 반환 정보 : 1- 광포 디코딩이 정확합니다. SDTAPI.DLL을 호출 할 때 0 통화 오류, -1- 광토 디코딩은 오류, -2-WLT 파일 접미사 오류, -3-wlt입니다. 파일 열기 오류, -4 -WLT 파일 형식 오류, -5 -SOFTWARE가 권한이 없음, -6 디바이스 연결 오류}
소스 코드 :
Unit IdReader; interfaceusessysutils, windows, forms, udatabase; constdll_sdtapi = 'sdtapi.dll'; dll_wltrs = 'wltrs.dll'; // Promp_Title = 'prompt'; tip_icreader_no_card = '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의 Array [0..14], WideChar의 Array [0..0], Nation : Array [0..1] 생일 : 배열 [0..7] Widechar; addr : widechar의 배열 [0..34]; idsn : widechar의 배열 [0..17]; Widechar의 배열 [0..14]; Vaildbegin : array [0..7]의 배열 [0..14] Vaildend : Widechar의 배열 [0..34]; : 정수; Idcard (iportid : 정수; var puciin : 정수; 정수; eGer) : stdcall; SDT_READBASEMSGTOFILE (Ipportid : filename1 : pansichar; var puichmsglen : var 푸른; sdtapi 이름 ' SDT_READBASEMSGTOFILE '; FILE_NAME : PANSICHAR; Intf : Integer; tStrings; 함수 Eshnicnotoname (ano : string) : String; string; string; beginresult : = lstethnic.values [ano]; end; formatdatest (avalue : string) : String; startesult : = copy (avalue, 1, 4) + '-' + 복사 (Avalue, 5, 2) + '-' + Copy (avalue, 7, 2); End; ender readiccard (var acardinfo : tidcardinfo; var aerrmsg : string) : boolean; variport : 정수; intopenportrtn : Integer; Busbport : 부울; edziportid : 정수 : 정수; Puciin; Integer; edziifopen : 정수; pucsn : 정수; puichmsglen : 정수; Puiphmsglen; fs : tfilestream; idcardinfo; // 결과 : = false; busbport : = false; edziifopen : = 1; edziportid : = 0; puichmsglen : = 0; puiphmsglen : // USB 포트의 기계 연결 감지, 먼저 USBFOR IPORT를 감지해야합니다. = 1001 ~ 1016 dobeginintopenportrtn : = sdt_openport (iport); intopenportrtn = 144 if intopenportrtn = 144 whenbeginedziportid : = iport; busbport : = true; end; 끝; // 직렬 포트의 장치 연결 감지를 사용하지 않으면 Busbport를 사용하지 않으면 iport : = = 1 ~ 2 dobeginintopenportrtn : = sdt_openport (iport); intopenportrtn = 144 whenbeginedziportid : = iport; busbport : = false; break; end; end; intopenportrtn <> 144 whenbegin // application.messagebox (erry_icreader _open_port); aerrmsg : = error_icreader_open_port; result : = false; 종료; 끝; // 카드를 찾습니다. iret : = sdt_startfindidcard (edziportid, puciin, edziifopen); if iret <> 159 thebeginiret : = sdt_startfindidcard (edziportid, edzifopon, puciin, edziifinipen); Iret <> 159 thebeginsdt_closeport (edziportid); // application.messagebox (tip_icreader_no_card, tip_title); aerrmsg : = tip_icreader_no_card; result : = false; exit; end; end; select card iret : = sdt_fectidcard (edziport). , pucsn, edziifopen); if iret <> 144 whenbeginiret : = sdt_selectidcard (edziportid, pucsn, edziifopen); if iret <> 144 whenbeginsdt_closeport (edziportid); // tip_icreader _ airecreader _; read_failed; 결과 : = false; exit; end; end; // 여기에서, 사용자는 fileExists ( 'wz.txt') 인 경우 응용 프로그램의 현재 디렉토리에 대한 권한을 읽고 써야합니다. ); FileExists ( 'zp.bmp')이면 sysutils.deletefile ( 'zp.bmp'); filexists ( 'zp.wlt') 인 경우 sysutils.deletefile ( 'zp.wlt'); // pansichar (ansistring) str)) iret : = sdt_readbasemsgtofile (edziportid, pansichar ( 'ansistring ('wz.txt ')), puichmsglen, pansichar (ansistring ('zp.wlt ')), puiphmsglen, if iret <> 144 thenbeginsdt_closeport (edziportid) ; // application.messagebox (tip_icreader_read_failed, tip_title); aerrmsg : = tip_icreader_read_failed; result : = false; enth; end; // 다음은 컴퓨터에서 권한 부여 파일이없는 경우. C 디스크의 루트 디렉토리에있는 제조업체 Busbport theiret : = getbmp (pansichar ( 'zp.wlt')), 2) elseiret : = getbmp (pansichar ( 'zp.wlt'). )), case iret of0 : beginApplication.messagebox (tip_icreader_call_dll_failed, tip_title); 1 : // 정상적인 시작; messagebox (tip_icreader_picture_decode_failed, tiptitle; _failed tip_title); -3 : beginApplication.messagebox (tip_icreader_wlt_file_open_failed, tip_title); end; -4 : regt_icreader_wlt_file_format_failed, tip_title le); 끝; -6 : beginApplication.messagebox (tip_icreader_device_failed, tip_title); end; sdt_closeport (edziportid); acardinfo)); fs.free; //// name : ansistring (idcardinfo.name); // 성별 : ansistring (idcardinfo.sex) = '1'그런 다음 성별 : = '남성'성별 : = '여성' ; // 민족 : 민족 노토 이름 (ansistring (insistring (idcardinfo.nation)); // 생년월 연도 및 날짜 : formatdatest (ansistring (idcardinfo.birthday)); // 주소 : = = trim (ansistring (ansistring) (idcardinfo.addr)). ; // id 번호 : id : = trim (ansistring (insistring (idcardinfo.idsn));//인증서 발행 기관 : place : = trim (ansistring (ansistring (idcardinfo.issueorgan)); // 요금 날짜 시작 validdatestart : = formatdatestring (ansistring) idcardinfo.vaildbegin)); // 수수료 날짜 종료 if trim (ansistring (insistring (idcardinfo.vaildend)) = '장기'그런 다음 // validdateend : = formatdateTime ( 'yyy-mm-dd', maxdateMe) // ValidDateend : = FormatDatest (insistring (idcardinfo.vaildend)); // 결과 : = true; ' +'= ' +'mongol '); add ('03' + '=' + 'hui people'); add ('04 ' +'= ' +'Tibetan People '); 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 ' +'= ' +'she people '); add ('23 ' +'= ' +'High Mountain Tribe '); add ('24' + '=' + 'lahu tribe'); add ('25 ' +'= ' +'aq ' +'naxi people '); add ('28' + '=' + 'jingpo people'); add ('29 ' +'= ' +'kirgiz '); add ('30' + '=' + ' tu '); add ('31' + '=' + 'dahan'); add ('32 ' +'= ' +'mullao '); add ('33' + '=' + 'Qiang'); ( '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' + '=' + '기타'); add ('98 ' +'= ' +'외국 귀화 '; 끝; FinalizationLstethnic.free; End .// 준비 SDTAPI.DLL WLTRS.DLL WLTRS.LIC 사전에 동일한 디렉토리를 넣으십시오.