Verifique a função atual da taxa de transmissão SDT_GETCOMBAUD (IPORT: INTEGER; PUIBAUDRATE: PINTEGER): Integer; stdcall; externo'sdtapi.dll '; {iport [in] representa o porto, pubaudrate [out] ponte A taxa especial normal da porta serial, o valor de retorno 0x90-sucesso, a falha de abertura da porta 0x1/número de porta é ilegal, 0x5 não pode obter a taxa de transmissão de SAM_V e a porta serial não está disponível. }
Defina a função da taxa de transmissão da porta serial sam_v SDT_STETCOMBAUD (IPORT: Integer; UicurrBaud: Integer; Uisetbaud: Inteiro): Inteiro; StdCall; Externo'sdtapi.dll '; {iport [em] a porta, uicurrBaud] Para alterar a API, a taxa de transmissão do terminal de serviço previamente definido com SAM_V (o padrão de fábrica é 115200). Se o valor do uicurrbaud não for um desses valores, a função retorna 0x21. A taxa de transmissão SAM_V a ser definida pelo UISETbaud [in] só pode ser usada para esses valores (o mesmo que acima) , O número da falha/porta da porta de 0x1 é ilegal, 0x2-timeout, a configuração não é bem-sucedida, os parâmetros de entrada de 0x21-uicurrbaud e uisetbaud estão incorretos}
Função serial da porta serial/USB SDT_OPENPORT (IPORT: INTEGER): INTEGER; stdcall; external'sdtapi.dll '; {iport [in] representa o número da porta, 1-16 (decimal) é a porta serial, 1001-1016 (decimal ) é a porta USB, a porta do dispositivo USB padrão é 1001. Função Retorna 0x90 - A porta é aberta com sucesso, 1 - a porta falhou / o número da porta é ilegal}
Feche a porta serial/USBFunction sdt_closeport (iport: integer): integer; stdcall; externo'sdtapi.dll '; {iport [in] indica o número da porta, o valor de retorno 0x90 fechou a porta serial com sucesso, 0x01 por porta é ilegal ilegal }
Redefinir função sdt_resetsam (iport: Integer; ilfopen: Integer): Inteiro; stdcall; externo'sdtapi.dll '; {iport [in] representa o número da porta atualmente, apenas 16 portas de série e suporte USB, portas serial: 0001-0016. , USB: 1001-1016. Ilfopen [in] significa que a porta serial não é aberta e fechada dentro da função. Valor 0x90 - bem -sucedido, outras falhas}
Defina o número máximo de bytes de comunicação da função do adaptador de RF sdt_setMaxrfbyte (iport: integer; ucbyte: char; blfopen: integer): integer; stdcall; externo'sdtapi.dll '; {iport [in] representa o número da porta, ucbyte [em ninn. ] é um caractere não assinado, 24-255, representa o número máximo de bytes de comunicação do adaptador de RF, ilfopen [in] consulte SDT_Resetsam Valor de retorno 0x90-success, outros falhas}
Execute a função de detecção de status em SAM_V SDT_GETSAMSTATUS (IPORT: INTERGER; ILFOPEN: Inteiro): Inteiro; 0x60 -Self falhou em verificar, incapaz de receber comandos, outros - comando falhou}
Leia o número de SAM_V FUNÇÃO SDT_GETSAMID (IPORT: Integer; Pussamid: Pbyte; Ilfopen: Integer): Integer; StdCall; externo'sdtapi.dll '; {iport [in] Indica o número da porta, Pussamid [out] String Pointer_v saminter_v número, 16 bytes, valor de retorno 0x90 - bem -sucedido, outros - falhou}
Leia o número de função sam_v sdt_getsamidtostr (iport: integer; pcSamid: pbyte; ilfopen: integer): integer; stdcall; externo'sdtapi.dll '; {iport [in] significa o número da porta, pussamid [out] sam_v, Ilf, [IN] Inteiro, consulte SDT_RESESTAM Valor de retorno 0x90 - bem -sucedido, outros - falhou}
Comece a procurar a função de cartão sdt_startfindidcard (iport: integer; pucmanainfo: pbyte; ilfopen: integer): integer; stdcall; externo'sdtapi.dll '; {iport [in] indica o número da porta, pucmanainfo [out] Número de gerenciamento de chips de cartões, 4 bytes, ilfopen [in] consulte SDT_RESESAM VALOR DE RETURNamento Valor 0x9f Pesquisa com sucesso, pesquisa de cartão 0x80 falhou} Função de seleção de cartões SDT_SELECTIDCARD (IPORT: Integer; pucmanamsg: pbyte; ilfopen: integeger; Externo'sdtapi.dll '; {iport [in] indica o número da porta, pucmanamsg [out] ponteiro não assinado, certificado/número de série do chip de cartão, 8 bytes, ilfopen [in] ver sdt_resetsam Valor de retorno 0x90 A seleção de card A seleção de cartões falhou}
Leia a função do número de gerenciamento de cartões sdt_readmnginfo (iport: integer; pucmanagemsg: pbyte; ilfopen: integer): integer; stdcall; externo'sdtapi.dll '; {iport [in] representa o número da porta, pucmanagemsg [out] Número de gerenciamento, 28 bytes, ilfopen [in] Retorno Valor 0x90 - bem -sucedido, outros - leia falhou}
Leia o Certificado/Informação Forte da Função SDT_ReadBaseMsg (IPORT: Integer; Pucchmsg: Pbyte; Puichmsglen: Pinteger; Pucphmsg: Pbyte; Puiphmsglen: Pinteger; Representa o número da porta, PUCCHMSG [OUT] aponta para as informações de texto de leitura, Puichmsglen [Out] aponta para o comprimento da informação de texto PUCPHMSG [OUT] aponta para as informações da foto, Puiphmsglen [out] aponta para o comprimento da informação da foto lida, ilfopen [in] consulte SDT_Resetsam Valor de retorno 0x90 - Leia as informações fixas com sucesso, outras informações fixas falhas}
Leia a função de informação adicional sdt_readnewappmsg (iport: inteiro; pucappmsg: pbyte; puiappmglen: pinteger; ilfopen: integer): integer ;; stdcall; external'sdtapi.dll '; {iport [in] indica o número da porta e pucpms [ aponta para as informações adicionais de leitura, Puiappmsglen [OUT] aponta para o comprimento de informação adicional de leitura, ilfopen [in] consulte SDT_RESESTAM Valor de retorno 0x90 - as informações adicionais de leitura são bem -sucedidas, outras - as informações adicionais falham}}
Função de decodificação de fotos GetBMP (WLT_FILE: PCHO, INTF: INTERGER): Inteiro; StdCall; Externo'wltrs.dll '; {WLT_FILE-WLT Nome do arquivo, Intf Reading Device Communication Interface Type (1-RS-232C, 2-USB) Valor de retorno: Geree *.bmp e as seguintes informações de retorno: a decodificação 1-foto está correta, o erro de 0-call em chamando sdtapi.dll, -1-photo Decoding é erro, -2-wlt. Erro de abertura do arquivo, -Erro de formato de arquivo 4 -WLT, -5 -Software não autorizado, -6 Erro de conexão com dispositivo}
código -fonte:
Unidade IdReader; , por favor, substitua o cartão! '; Tip_icreader_read_failed =' A leitura do cartão falhou! '; Tip_icreader_call_dll_failed =' Erro de chamada chamando sdtapi.dll! '; Tip_icreader_picture_decode_failed =' Erro de decodificação de fotos! '; Tip_icreader_wlt_file_extend_failed =' Erro do sufixo do arquivo wlt! '; Tip_icreader_wlt_file_open_failed =' Erro de abertura do arquivo wlt! '; Tip_icreader_wlt_file_format_failed =' Formato de arquivo wlt está errado! '; Tip_icreader_no_license =' O software não está autorizado! '; Tip_icreader_device_failed =' Erro de conexão do dispositivo! '; Tip_print_no_card_found =' Não foi encontrado informações relacionadas ao cartão de identificação. '; Tip_icreader_save_success =' Salvar com sucesso, as informações de identidade foram inseridas automaticamente no banco de dados local! '; Tip_icreader_black_card_found =' As pessoas incluídas na lista negra foram encontradas! '; Error_icreader_open_port =' A porta não foi aberta, verifique a porta correspondente ou reconecte o leitor de cartão! '; TypeTidCardInfo = RecordName Packed Nome: Array [0..14] de Widechar; sexo: Array [0..0] de Widechar; Nação: Array [0..1] de Widchar; Aniversário: Array [0..7] de WideChar; Addr: Array [0..34] de Widechar; Idsn: Array [0..17] de Widechar; Issueorgan: Array [0..14] de Widechar; Vaildbegin: Array [0..7] de WideChar ; : Inteiro; (IPORTID: Inteiro; var puciin: número inteiro; Número inteiro) : Inteiro; _Sdtapi nome ' Sdt_readbasemsgtofile; TStrings; função étnicnoToname (ano: string): string; BeginResult: = LSTETHNIC.Values [Ano]; End; Função FormatDatestST (Avalue: String): String; BeginResult: = Copy (Avalue, 1, 4) + '-' + Cópia (Avalue, 5, 2) + '-' + cópia (Avalue, 7, 2); end; função readiccard (var acardinfo: tidcardinfo; var aerrmsg: string): boolean; variport: integer; integro; Boolean; edziportid: Integer; Iret: Inteiro; Puciina: Inteiro; Edziifope: Inteiro; PUCSN: Inteiro; Puichmsglen: Integer; Puiphmsglen: Integer; // Resultado: = false; BUSBPORT: = false; edziifope: = 1; edziportId: = 0; puichmsglen: = 0; puiphmsglen: = 0; // detecta a conexão da máquina da porta USB, você deve primeiro detectar USBFor iport: = 1001 a 1016 DOBEGININTOPENPORTRTN: = SDT_OPENPORT (IPORT); se intenoportrtn = 144 thenbeginedziportId: = iport; Busbport: = true; Break; end; end; // Detecção da conexão do dispositivo da porta serial se não Busport ThenBeggin; 1 a 2 DOBEGININTOPEMPORTRTN: = SDT_OPENPORT (IPORT); se Intopenportrtn = 144 ThenBeginedziportId: = iport; BUSBPORT: = false; Break; end; END; END; ErrleRead; se Intopenportrn <> 144 thenBegin // Aplicação.messageBox (ErrorLeRead; Aerrmsg: = error_icreader_open_port; resultado: = false; exit; end; // Procure por IRET: = sdt_startfindidcard (edziportid, puciin, edziifopen); se Iret <> 159 ThenBeginiret: = SdtenT_StartFidcard (Edziport; Procure cartão se IRET <> 159 thenbeginsdt_closeport (EdziportId); // Application.MessageBox (tip_icReader_no_card, tip_title); aerrmsg: = tip_icreader_no_card; resultado: = false; end; end;//select carard: = sd; PUCSN, Edziifope); se IRET <> _Failed; resultado : = False; saída; end; end; // observe que aqui o usuário deve ter lido e gravar permissões para o diretório atual do aplicativo se fileExists ('wz.txt') então sysutils.deletefile ('wz.txt' ); if fileExists ('zp.bmp') então sysutils.deletefile ('zp.bmp'); if fileExists ('zp.wlt') então sysutils.deletefile ('zp.wlt'); // pansichar (Ansistring ( Str)) Iret: = sdt_readbasemsgtofile (edziportid, pansichar (Ansistring ('wz.txt')), puichmsglen, pansichar (Ansistring ('zp.wlt')), Puiphmsglen, 1); se IRETIDIDIDADE (IRETIDID)), PUIPHMSGLENE, 1); se IrreTIdIrgIdttt))), Puiphmsglen, 1); se IrretIdIrgIdttt))), Puiphmsglen, 1); se IRETIDIDIDADE (IRETIDID) ; // Application.MessageBox (tip_icreader_read_failed, tip_title); aerrmsg: = tip_icreader_read_failed; resultado: = false; saída; end; // o seguinte é para analisar a foto. Fabricante no diretório raiz do disco C, a resolução de fotos falhará se o Busbport theniret: = getBmp (Pansichar (Ansistring ('ZP.Wlt')), 2) elseiret: = getBMP (pansichar (Ansistring ('ZP.Wlt' )), 1); caso IRET de 0: BEGNAPLICAÇÃO.MESSAGEBOX (tip_icreader_call_dll_failed, tip_title); Falhou , Tip_title); end; -3: BeginApplication.MessageBox (tip_icreader_wlt_file_open_failed, tip_title); end; -4: BEGNAPPLICATION.MESSAGEB (Tip_icReader_Wlt_File_File_Failed Le); fim; -6 : BEGNAPPLICAÇÃO.MESSAGEBOX (tip_icreader_device_failed, tip_title); end; end; sdt_closeport (EdziportId); Acardinfo)); fs.free; //// nome: Ansistring (idcardinfo.name); // sexo: se Ansistring (idcardinfo.sex) = '1' então sexo: = 'masculino' mais gênero: = 'feminino' ; // étnico: étnicnoToname (Ansistring (Idcardinfo.nation)); // Ano do mês e data do nascimento: formatDateSTST (Ansistring (Idcardinfo.birthday)); // Endereço: Endereço: = Trim (Ansistring (Idcardinfo.addr)); ; // Número de identificação: id: = Trim (Ansistring (IDCardInfo.idsn));//Certificado emissora Agência: Place: = Trim (Ansistring (iDCardInfo.ISSUEORGAN); // Data da taxa inicia o ValidDatestart: = FormatDateSTest (Ansistring ( idcardinfo.vaildbegin)); // Data da taxa final se acabar (Ansistring (idcardinfo.vaildend)) = 'longo prazo' então // validDateEnd: = formatDateTime ('yyyy-mm-dd', maxdateTime)/else // // Valdatend: = formatDatestST (Ansistring (IDCardInfo.vaildend)); // Resultado: = true; end; ' +' = ' +' Mongol '); add ('03' + '=' + 'hui pessoas'); add ('04 ' +' = ' +' povo tibetano '); add ('05' + ' = ' +' Povo uyghur '); add ('06' + '=' + 'Miao People'); add ('07 ' +' = ' +' yi pessoas '); add ('08' + '=' + 'Povo zhuang'); add ('09 ' +' = ' +' byi pessoas '); add (' 10 ' +' = ' +' coreano '); add ('11' + '=' + 'manchu '); Add ('12' + '=' + 'dong'); add ('13 ' +' = ' +' yao pessoas '); 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' + '=' + 'Tribo Lahu'); Add ('25 ' +' = ' +' Aqua Tribe '); Add ('26' + '=' + 'Dongxiang People'); Add ('27 ' +' = ' +' Pessoas naxi '); add ('28' + '=' + 'jingpo pessoas'); 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 ' +' = ' +' Tribo Gelao '); Add ('38' + '=' + 'Xibe Tribe'); Add ('39 ' +' = ' +' Achang Tribe '); Add ('40' + '=' + 'Tribo Pumi'); Add ('41 ' +' = ' +' Tribe Tajik '); Add ('42' + '=' + 'Nur Tribe'); Add ('43 ' +' = ' +' Tribo Uzbek '); Add ('44' + '=' + 'Tribe Russian'); Add ('45' + '=' + 'Ewenki'); Add ('46 ' +' = ' +' De'ang '); add ('47' + '=' + 'Baoan'); add ('48 ' +' = ' +' Tribo Yugu '); Add ('49' + '=' + 'Tribo Jing '); Add ('50' + '=' + 'Tribar Tria ; Add ('53 ' +' = ' +' hezhe clã '); add ('54' + '=' + 'Menba'); add ('55 ' +' = ' +' Luba '); add (' 56 ' +' = ' +' kino '); add ('57' + '=' + 'outros'); add ('98 ' +' = ' +' naturalização estranha '); end; finalizationlstethnic.free; final; .//Please Prepare sdtapi.dll wltrs.dll wltrs.lic com antecedência, coloque no mesmo diretório