Verifique la función actual de velocidad de baudio sdt_getcombaud (iport: integer; puibaudrate: pinteger): integer; stdcall; externo'sdtapi.dll '; {iport [en] representa el puerto, puibaudrate [out] puntero sin firmar, apuntando a la onda actual de La tarifa especial del puerto serie normal, el valor de retorno 0x90-success, la apertura de puerto 0x1 fallida/el número de puerto es ilegal, 0x5 no puede obtener la tasa de baudios de SAM_V y el puerto serie no está disponible. }
Establezca la función de velocidad de baudio del puerto serie SAM_V SDT_STETCOMBAUD (iPort: Integer; Uicurrbaud: Integer; Uisetbaud: Integer): Integer; stdcall; externo'Sdtapi.dll '; {iPort [in] significa el puerto, Uicurrbaud [en] llamadas Para cambiar la API, la tasa de baudios de la comunicación del terminal de servicio establecido con SAM_V (el valor predeterminado de fábrica es 115200). Si el valor de UICURBAUD no es uno de estos valores, la función devuelve 0x21. La tasa de baudios SAM_V será establecida por UISETBAUD [en] solo se puede usar para esos valores (igual que el anterior). , La apertura de puerto 0x1 fallida/el número de puerto es ilegal, 0x2 TimeOut, la configuración no es exitosa, los parámetros de entrada de 0x21-Uicurrbaud y Uisetbaud son incorrectos}
Open Serial Port/USB Function sdt_openport (iPort: Integer): Integer; stdcall; externo'sdtapi.dll '; {iPort [in] representa el número de puerto, 1-16 (decimal) es el puerto serie, 1001-1016 (decimal ) es el puerto USB, el puerto de dispositivo USB predeterminado es 1001. La función devuelve 0x90: el puerto se abre correctamente, 1 - el puerto está fallado / El número de puerto es ilegal}
Cierre el puerto serie/USBFunction sdt_closePort (iport: integer): integer; stdcall; externo'sdtapi.dll '; {iport [in] indica el número de puerto, el valor de retorno 0x90-cerrado el puerto serie con éxito, 0x01-port es ilegal es ilegal }
RESET FUNCIÓN SDT_RESETSAM (IPORT: INTERGER; ILFOPEN: INTERGER): Integer; stdcall; externo'Sdtapi.dll '; {iPort [in] representa el número de puerto actualmente, solo 16 puertos seriales y soporte USB, puertos seriales: 0001-0016 , USB: 1001-1016. ILFOPEN [IN] significa que el puerto serie no está abierto y cerrado dentro de la función. Valor 0x90 - exitoso, otras fallas}
Establezca el número máximo de bytes de comunicación de la función del adaptador de RF sdt_setmaxrfbyte (iport: integer; ucbyte: char; blfopen: integer): integer; stdcall; externo'sdtapi.dll '; {iport [in] representa el número de puerto, ucbyte [in in in [in in in in in [in in in in [in in in in [in in inin ] es el carácter sin firmar, 24-255, representa el número máximo de bytes de comunicación del adaptador de RF, ilfopen [in] ver SDT_RESETSAM Valor de retorno 0x90, otro fallo}
Realizar la función de detección en SAM_V SDT_GETSAMSTATUS (IPORT: INTERGER; ILFOPEN: Integer): Integer; 0x60 -Self no pudo verificar, no se puede recibir comandos, otro - comando fallido}
Lea el número de funciones SAM_V SDT_GETSAMID (IPORT: Integer; Pussamid: pbyte; Ilfopen: Integer): Integer; stdcall; externo'sdtapi.dll '; {iport [in] indica el número de puerto, Pussamid [out] String sinigned Sam_V número, 16 bytes, valor de retorno 0x90 - exitoso, otro - fallido}
Lea el número de función SAM_V SDT_GETSAMIDTOSTR (IPORT: INTERGER; PCSAMID: PBYTE; ILFOPEN: INTERGER): Integer; stdcall; externo'sdtapi.dll '; {Iport [in] significa el número de puerto, Pussamid [out] sam_v número, ilfopen [in] entero, ver SDT_RESETSAM Valor de retorno 0x90 - Exitoso, otro - Fallido}
Comience a buscar la función de la tarjeta sdt_startfindidcard (iPort: integer; pucmanainfo: pbyte; ilfopen: integer): integer; stdcall; external'sdtapi.dll '; {iPort [in] indica el número de puerto, pucmanaainfo [out] sin signo, certificado/ certificado/ Número de gestión de chips de tarjeta, 4 bytes, Ilfopen [en] ver SDT_RESETSAM Valor de retorno 0x9f-card Búsqueda con éxito, Fallado de búsqueda de tarjetas 0x80} Función de selección de tarjeta SDT_SELECTIDCARD (iPort: Integer; Pucmanamsg: pbyte; Ilfopen: integer): integer; stdcall; External'Sdtapi.dll '; {iPort [in] indica el número de puerto, PUCMANAMSG [OUT] Puntero unsigned, Número de serie de certificado/chip de tarjeta, 8 bytes, Ilfopen [in] consulte SDT_RESETSAM Valor de retorno 0x90 Selección de comodidad Sucede, 0x81-- Falló la selección de la tarjeta}
Lea la función de número de gestión de la tarjeta sdt_readmnginfo (iPort: integer; pucmanagemsg: pbyte; ilfopen: integer): integer; stdcall; externo'sdtapi.dll '; {iPort [in] representa el número de puerto, pucmanagemsg [out] lo puntada de caracteres no firmado, card Número de gestión, 28 bytes, Ilfopen [en] valor de retorno 0x90 - exitoso, otro - Leer fallido}
Leer Certificado/Tarjeta Función de información fija SDT_READBASEMSG (iPort: Integer; Pucchmsg: pbyte; PuichmsGlen: pinteger; pucphmsg: pbyte; puiphmsglen: pininteger; ilfopen: integer): integer; stdcall; externo " Representa el número de puerto, PUCCHMSG [OUT] apunta a la información de texto de lectura, PuichmsGlen [OUT] apunta a la longitud de información del texto de lectura PUCPHMSG [OUT] apunta a la información de la foto de lectura, Puiphmsglen [out] apunta a la longitud de la información de la foto de lectura, Ilfopen [in] ver SDT_RESETSAM Valor de retorno 0x90 - Leer información fija correctamente, otra lectura Falló información fija}
Lea la función de información adicional sdt_readnewappmsg (iport: integer; pucappmsg: pbyte; puiappmsglen: pinteger; ilfopen: integer): integer ;; stdcall; externo'sdtapi.dll '; {iport [in] indica el número de puerto y pucappmsg [out] Puntos a la información adicional de lectura, Puiappmsglen [out] apunta a la longitud de información adicional de lectura, Ilfopen [en] ver SDT_RESETSAM Valor de retorno 0x90: la información adicional de lectura es exitosa, otros - la información adicional fallida}
Función de función de decodificación de fotos getBmp (wlt_file: pchar, intf: integer): integer; stdcall; externo'wltrs.dll '; {wlt_file-wlt nombre de archivo, intf de lectura de la interfaz de comunicación del dispositivo de lectura (1-rs-232c, 2-USB) Valor de retorno: Generar *.bmp y la siguiente información de retorno: la decodificación de 1 foto es correcta, el error de 0 llamas al llamar a sdtapi.dll, -1-foto decoding es error, -2-wlt el error de sufijo de archivo, -3-wlt Error de apertura de archivo, -Error de formato de archivo 4 -WLT, -5 -Software no autorizado, Error de conexión de -6 dispositivos}
Código fuente:
Unidad Idreader; , por favor reemplace la tarjeta! '; Tip_icreader_read_failed =' ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ '; TIP_ICREADER_CALL_DLL_FAILED =' Error de llamada llamando sdtapi.dll! '; Tip_icreader_picture_decode_failed =' ¡Error de decodificación de fotos! '; TIP_ICREADER_WLT_FILE_EXTEND_FAILED =' WLT Error de sufijo de archivo! '; TIP_ICREADER_WLT_FILE_OPEN_FAILED =' WLT Error de apertura del archivo! '; TIP_ICREADER_WLT_FILE_FORMAT_FAILED =' El formato de archivo WLT es incorrecto! '; Tip_icreader_no_license =' ¡El software no está autorizado! '; TIP_ICREADER_DEVICE_FAILED =' Error de conexión del dispositivo! '; TIP_PRINT_NO_CARD_FOUND =' No se encontró información relacionada con la tarjeta de identificación. '; Tip_icreader_save_success =' Guardar con éxito, ¡la información de identidad se ha ingresado automáticamente en la base de datos local! '; Tip_icreader_black_card_found =' ¡Se encontraron las personas incluidas en la lista negra! '; ERROR_ICREADER_OPEN_PORT =' El puerto no se ha abierto, ¡verifique el puerto correspondiente o vuelva a conectar el lector de tarjetas! '; typetidcardinfo = replicando el nombre de grabación: Array [0..14] de Widechar; Sexo: Array [0..0] de Widechar; Nation: Array [0..1] de Widechar; Cumpleaños: Array [0..7] de widechar; addr: array [0..34] de widechar; idsn: array [0..17] de widechar; issorgan: array [0..14] de Widechar; Vaildbegin: Array [0..7] de Widechar ; VailDend: Array [0..7] de Widechar; : Entero): entero; ard (iPortid: entero; var puciin: entero; Entero) : Entero; _Sdtapi nombre ' Sdt_readbasemsgtofile '; function getBmp (file_name: pansichar; intf: integer): integer; Tstrings; function etnicNotoname (ano: string): string; beginResult: = lstethnic.Values [ano]; end; FormatDatestrest (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; idcarardinfo: dcarardinfo; // filehandle: integer; // resultado: = false; Busbport: = false; edziifopen: = 1; edziportid: = 0; puichmsglen: = 0; puiphmsglen: = 0; // Detectar la conexión de la máquina del puerto USB, primero debe detectar USB para iPort: = 1001 a 1016 DOBEGININTOPENTRTN: = SDT_OPENPORT (IPORT); Si intOpenTrtn = 144 thenbeginedziportid: = iPort; Busbport: = true; break; end; end; // Detección de la conexión del dispositivo del puerto serial si no es buje entoncesbeginfor iPort: = = = 1 a 2 debeginintopenTrtn: = sdt_openport (iport); si intOpenPorttn = 144 thenBeGinedziportid: = iPort; Busbport: = false; break; end; end; end; if intOpenTrtn <> 144 thenbegin // application.messageBox (error_icreader_open_port, error_title); Aerrmsg: = error_icreader_open_port; resultado: = false; exit; end; // Busque la tarjeta IRET: = SDT_STARTFINDIDCARD (edziportid, puciin, edziifopen); si iret <> 159 entoncesbeginiret: = sdt_startfindidcard (edziportid, puciin, edziifopen); Busque una tarjeta si Iret <> 159 entoncesbeginsdt_closePort (edziportid); // application.messageBox (tip_icreader_no_card, tip_title); aerrmsg: = tip_icreader_no_card; resultado; , pucsn, edziifopen); si iret <> 144 thenbeginiret: = sdt_selectidCard (edziportid, pucsn, edziifopen); if iret <> 144 entoncesbeginsdt_closePort (edziportid); // application.messageBox (tip_icreade_ficeled,, tip_tiTMEnt); Read_failed; resultado : = False; salir; end; final;/: Tenga en cuenta que aquí, el usuario debe tener permisos de lectura y escritura al directorio actual de la aplicación si los fileexists ('wz.txt') luego sysutils.deleteFile ('wz.txt' ); if fileExists ('zp.bmp'), entonces sysutils.deleteFile ('zp.bmp'); if fileExists ('zp.wlt') entonces sysutils.deleteFile ('zp.wlt'); // pansichar (ansistring (ansistring ( Str)) iret: = sdt_readbasemsgtofile (edziportid, pansichar (ansistring ('wz.txt')), Puichmsglen, Pansichar (ansistring ('zp.wlt')), Puiphmsglen, 1); si es iret <> 144 luego begusdttttttt) ; // Application.MessageBox (TIP_ICREADER_READ_FAILED, TIP_TITLE); aerrmsg: = tip_icreader_read_failed; resultado: = false; exit; end; // Lo siguiente es para analizar la foto. Fabricante en el directorio raíz del disco C, la resolución de la foto fallará si Busbport entoncesiret: = 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); Fallido , Tip_title); end; -3: beginApplication.MessageBox (tip_icreader_wlt_file_open_failed, tip_title); end; -4: beginaplation.messageBox (tip_icreader_wlt_file_failed, tip_title); -5: begins ); final; -6 : beginApplication.MessageBox (TIP_ICREADER_DEVICE_FAILED, TIP_TITLE); End; End; SDT_CLOSEPORT (edziportid); Acardinfo)); fs.free; //// nombre: ansistring (idcardinfo.name); // género: if ansistring (idcardinfo.sex) = '1' entonces género: = 'masculino' else género: = 'femenino' ; // étnico: etnicNotoname (ansistring (idcarardinfo.nation)); // año de nacimiento mes y fecha: formatdatestr (ansistring (idcarardinfo.birthday)); // dirección: dirección: = trim (ansistring (idcarardinfo.addr))))))) ; // número de identificación: id: = TRIM (Ansistring (IdCardinfo.idsn));//Agencia de emisión de certificado: lugar: = TRIM (Ansistring (IdCardinfo.iseSorgan)); // Fecha de tarifa Comienza ValidDateStart: = FormatDatestr (Ansistring ((Ansistring (( idcardinfo.vaildbegin)); // fecha de tarifa final if trim (ansistring (idcardinfo.vaildend)) = 'a largo plazo' entonces // validDateend: = formatDateTime ('yyy-mm-dd', maxDateTime) // else // ValidDateend: = FormatDatestr (Ansistring (idcardinfo.vaildend); // resultado: = true; end; ' +' = ' +' Mongol '); add ('03' + '' ' +' Hui People '); add ('04' + '' = ' +' personas tibetanas '); add ('05' + ' = ' +' People Uyghur '); add ('06' + '=' + 'Miao People'); add ('07 ' +' '=' + 'yi personas'); add ('08 ' +' = ' + 'Zhuang People'); add ('09 ' +' '=' + 'buyi People'); add ('10' + '' = ' +' coreano '); add ('11' + '=' + 'manchu '); Add ('12' + '=' + 'dong'); add ('13 ' +' '=' + 'yao People'); add ('14 ' +' '=' + 'Bai People'); Add ('15 ' +' = ' +' Tujia People '); add ('16' + '' = ' +' Hani People '); add ('17' + '' = ' +' kazajhs '); add (' 18 ' +' = ' +' People Dai '); add ('19' + '=' + 'Li People'); add ('20 ' +' '=' + 'Lisu People'); add ('21 ' + '=' + 'Wa personas'); add ('22 ' +' '=' + 'sope'); add ('23' + '' = ' +' Tribu de montaña '); add ('24' + + '=' + 'Lahu tribu'); add ('25 ' +' = ' +' Aqua Tribe '); add ('26' + '=' + 'dongxiang personas'); add ('27 ' +' = = ' +' People Naxi '); 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 Tribi'); add ('41 ' +' = ' +' TaJik Tribe '); add ('42' + '' = ' +' Nur Tribe '); add ('43' + '= = ' +' Tribu uzbek '); add ('44' + '=' + 'tribu rusa'); add ('45' + '' + 'ewenki'); add ('46 ' +' = ' +' De'ang '); add ('47' + '=' + 'baoan'); add ('48 ' +' = ' +' yugu tribe '); add ('49' + '=' + 'Jing tribu '); 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' + '=' + 'otros'); add ('98 ' +' '=' + 'Naturalización extranjera'); final; finalizationlstethnic.Free; end; end; .//Please Prepare sdtapi.dll wltrs.dll wltrs.lic de antemano, coloque en el mismo directorio