Check the current baud rate function SDT_GetCOMBaud(iport: integer; puiBaudRate: Pinteger): integer;stdcall;External'SDTAPI.DLL';{iPort[in] represents the port, puiBaudRate[out] unsigned pointer, pointing to the current wave of Le taux spécial du port série normal, la valeur de retour 0x90-succès, le numéro d'ouverture du port 0x1, le numéro de port est illégal, 0x5 ne peut pas obtenir le taux de bauds de SAM_V et le port série n'est pas disponible. }
Définissez la fonction de taux de bauds du port série SAM_V SDT_STETCOMBAUD (iport: entier; UICurrBAUD: Integer; uiSetBaud: Integer): Integer; stdcall; external'sdtapi.dll '; {iport [in] signifie le port, uicurrbaud [in] appelle les appels Pour modifier l'API, le taux de bauds de la communication du terminal de service précédemment défini avec SAM_V (défaut d'usine est 115200). Si la valeur UICurrbaud n'est pas une de ces valeurs, la fonction renvoie 0x21. Le taux BAUD SAM_V à définir par UiSetBaud [in] ne peut être utilisé que pour ces valeurs (comme ci-dessus). , Le numéro d'ouverture du port 0x1, le numéro de port est illégal, 0x2-timeout, le paramètre n'est pas réussi, les paramètres d'entrée de 0x21-uicurrbaud et uisetbaud sont incorrects}
Fonction de port série / USB Open SDT_OpenPort (iport: Integer): Integer; stdcall; external'sdtapi.dll '; {iport [in] représente le numéro de port, 1-16 (décimal) est le port série, 1001-1016 (décimal ) est le port USB, le port de périphérique USB par défaut est 1001. La fonction renvoie 0x90 - Le port est ouvert avec succès, 1 - le port est échoué / Le numéro de port est illégal}
Fermez le port série / USBFunction SDT_CLOSEPORT (IPORT: INTEGER): INTEGER; STDCALL; EXTERNAL'SDTAPI.DLL '; {iport [in] indique le numéro de port, la valeur de retour 0x90 a déclaré le port série avec succès, 0x01-port est illégal }
Reset Fonction SDT_RESETSAM (IPORT: INTEGER; Ilfopen: Integer): Integer; stdcall; external'sdtapi.dll '; {iport [in] représente le numéro de port. , USB: 1001-1016. Ilfopen [in] signifie que le port série n'est pas ouvert et fermé dans la fonction. valeur 0x90 - réussi, autres échecs}
Définissez le nombre maximum d'octets de communication de la fonction de l'adaptateur RF SDT_SETMAXRFBYTE (IPORT: INTEGER; UCBYTE: CHAR; BLFOPEN: INTEGER): INTEGER; STDCALL; EXTERNAL'SDTAPI.DLL '; {iport [in] représente le nombre de port, UCBYTE [en indll'; ] est un caractère non signé, 24-255, représente le nombre maximal d'octets de communication de l'adaptateur RF, ilfopen [in] Voir SDT_RESETSAM RETOUR-valeur 0x90-Success, Autre-Failure}
Effectuer la fonction de détection d'état sur SAM_V SDT_GETSAMSTATUS (iport: entier; ilfopen: Integer): Integer; 0x60-self n'a pas vérifié, incapable de recevoir des commandes, une autre - la commande a échoué}
Lire le nombre de fonctions sam_v sdt_getsamid (iport: entier; pussamid: pbyte; ilfopen: entier): entier; stdcall; external'sdtapi.dll '; {iport [in] indique le numéro de port, pussamid [out] pointeur de corde non signé SAM_V numéro, 16 octets, valeur de retour 0x90 - réussi, autre - échec}
Lire le nombre de fonctions sam_v sdt_getsamidtoStr (iport: entier; pcsamid: pbyte; ilfopen: entier): entier; stdcall; external'sdtapi.dll '; {iport [in] signifie le numéro de port, pussamid [out] sam_v numéro, iLfoPen [in] entier, voir SDT_RESETSAM RETOUR VALEUR 0X90 - SUCCÈS, AUTRE - Échec}
Commencez à chercher une fonction de carte sdt_startFindidCard (iport: entier; pucmanainfo: pbyte; ilfopen: Integer): Integer; stdcall; external'sdtapi.dll '; {iport [in] indique le numéro de port, Pucmanainfo [out] point non signé, certificat / Numéro de gestion des puces de cartes, 4 octets, ilfopen [in] Voir SDT_RESETSAM Valeur de retour 0x9f-card Recherche avec succès, 0x80-card Search a échoué} fonction de sélection de carte SDT_SelectIdCard (Iport: Integer; Pucmanamsg: PBYTE; Ilfopen: INTER): INGER; STDCALL; External'sdtapi.dll '; {iport [in] indique le numéro de port, Pucmanamsg [out] pointeur non signé, certificat / numéro de la puce de carte, 8 octets, ilfopen [in] Voir sdt_resetsam La sélection des cartes a échoué}
Lire la fonction de gestion de la carte de carte sdt_readmnginfo (iport: entier; pucmanagemsg: pbyte; ilfopen: Integer): Integer; stdcall; external'sdtapi.dll '; {iport [in] représente le numéro de port, Pucmanagemsg [out] un point de caractère non signé, la carte de la carte, la carte de la carte, Pucmanagemsg [out], le point de caractère non signé, la carte, la carte, la carte Pucmanagemsg, le point de caractère non signé, la carte, représente le numéro de port, PucManagemsg [Out] Signed Popin Numéro de gestion, 28 octets, ilfopen [en] valeur de retour 0x90 - réussi, autre - lecture échouée}
Lire Certificat / Card Fonction d'informations fixes SDT_READBASEMSG (IPORT: INTEGER; PUCCHMSG: PBYTE; PUICHMSGLEN: PInteger; Pucphmsg: PBYTE; PUIPHMSGLEN: PInteger; Ilfopen: INTER): INTER représente le numéro de port, PucChmsG [Out] pointe vers les informations sur le texte de lecture, PuichmsGlen [out] pointe vers la longueur d'informations de texte de lecture Pucphmsg [Out] pointe les informations sur la photo, PUIPHMSGLEN [Out] pointe vers la longueur des informations sur la photo, la longueur d'information, Ilfopen [in] Voir SDT_RESETSAM Valeur de retour 0x90 - Lire les informations fixes avec succès, d'autres informations fixes échouées}
Lire la fonction d'informations supplémentaires sdt_readnewAppmsg (iport: Integer; PucAppMsg: PBYTE; PUIAPPMSGLEN: PInteger; Ilfopen: Integer): Integer ;; stdcall; external'sdtapi.dll '; {iport [in] indique le numéro de port, et Pucappmsg [out] Poublie les informations supplémentaires de lecture, PUIAPPMSGLEN [Out] pointe vers la durée de lecture des informations supplémentaires, ilfopen [in] Voir SDT_RESETSAM RETOUR VALEUR 0X90 - La lecture des informations supplémentaires est réussie, d'autres - les informations supplémentaires de lecture ont échoué}
Fonction de fonction de décodage de photos getBMP (wlt_file: pChar, intf: Integer): Integer; stdcall; external'wlts.dll '; {wlt_file-wlt nom, intf de lecture de dispositif d'interface de communication (1-RS-232C, 2-USB) Valeur de retour: générer * .BMP et les informations de retour suivantes: le décodage 1-phot est correct, l'erreur de 0-call dans l'appel sdtapi.dll, -1-photo décodage est une erreur, -2-wlt, une erreur de suffixe de fichier, -3-wlt Erreur d'ouverture du fichier, - Erreur de format de fichier 4-Wlt, -5-Software non autorisé, -6 Erreur de connexion de l'appareil}
Code source:
Unité iDreader; , veuillez remplacer la carte! '; Tip_icreader_read_failed =' La lecture de la carte a échoué! '; TIP_ICREADER_CALL_DLL_FAILED =' Erreur d'appel appelle sdtapi.dll! '; Tip_icreader_picture_decode_failed =' Erreur de décodage photo! '; TIP_ICREADER_WLT_FILE_EXTEND_FAILED =' Erreur de suffixe de fichier WLT! '; TIP_ICREADER_WLT_FILE_OPEN_FAILED =' Erreur d'ouverture du fichier WLT! '; TIP_ICREADER_WLT_FILE_FORMAT_FAILED =' Le format de fichier WLT est faux! '; Tip_icreader_no_license =' Le logiciel n'est pas autorisé! '; Tip_icreader_device_failed =' Erreur de connexion de l'appareil! '; Tip_print_no_card_found =' Aucune information liée à la carte d'identité n'a été trouvée. '; TIP_ICREADER_SAVE_SUCCESS =' Enregistrer avec succès, les informations d'identité ont été automatiquement entrées dans la base de données locale! '; Tip_icreader_black_card_found =' Les personnes incluses dans la liste noire ont été trouvées! '; Error_icreader_open_port =' Le port n'a pas ouvert, veuillez vérifier le port correspondant ou reconnecter le lecteur de carte! '; TypetidCardinfo = Nom de disque emballé: Array [0..14] de WidEchar; Sex: Array [0..0] de WidEchar; Nation: Array [0..1] de WidEchar; anniversaire: Array [0..7] de widEchar; addr: array [0..34] de widEchar; idsn: array [0..17] de widEchar; problème: array [0..14] de widEchar; vaildbegin: array [0..7] de widechar ; VailDend: Array [0..7] de WidEchar; thenewestaddr: array [0..34] de widEchar; fin; fonction sdt_openport (iportId: Integer): Integer; : Integer): INTEGER; SelectIdCard (iportId: entier; var puciin: entier; iifopen: entier): entier; Ouvert: entier) : Integer name dll_sdtapi externe ' Sdt_readbasemsgtofile '; fonction getBMP (file_name: pansichar; Intf: Integer): Integer; NIC: TStrings; fonction ethnicnotoname (ano: string): string; beginResult: = lstethnic.Values [ano]; end; function formatDatestr (avalue: string): string; beginResult: = copy (avalue, 1, 4) + '-' + Copie (Avalue, 5, 2) + '-' + Copy (Avalue, 7, 2); fin; fonction ReadicCard (var Acardinfo: tidCardinfo; var arrmsg: String): bobolean; variport: entier; IntopenPorttn: Integer; Busbport: Boolean; edziportid: entier; iret: entier; Puciin: entier; edziifopen: entier; Pucsn: Integer; Puichmsglen: Integer; Puiphmsglen: entier; FS: TFilestream; idCardinfo: TidCardinfo; // Résultat: = false; busbport: = false; edziifopen: = 1; edziportid: = 0; puichmsglen: = 0; puiphmsglen: = 0; // détecter la connexion de la machine du port USB, vous devez d'abord détecter usbfor pour iport: = 1001 à 1016 dobeginIntopenporttrtn: = sdt_openport (iport); si intopenporttrtn = 144 thenbeginedziportid: = iport; busbport: = true; pause; end; end; // détection de la connexion du périphérique du port de série si non busbport alorsBolfor iport: = 1 à 2 dobeginIntopenporttrtn: = sdt_openport (iport); if intopenportrtn = 144 therebeginedziportid: = iport; busbport: = false; Break; end; end; fin; if Intopenporttn <> 144 thenbegin // application.message box (error_icreder_open_port, error_Title); Aerrmsg: = error_icreader_open_port; résultat: = false; exit; end; // recherche la carte iret: = sdt_startFindidcard (Edziportid, Puciin, edziifopen); if iret <> 159 alorsBeginiret: = sdt_startfindidcard (edziportid, PUCIINE, edziifip Recherchez la carte si iret <> 159 thenbeginsdt_closeport (edziportid); // application.messagebox (TIP_ICREADER_NO_CARD, TIP_TITLE); AERRM , Pucsn, edziifopen); if iret <> 144 alorsBeginiret: = sdt_selectIdCard (Edziportid, Pucsn, edziifopen); if iret <> 144 thenbeginsdt_closeport (edziportid); // application.MessageBox (tip_icreder_read_filed); Er_read_failed; résultat : = False; exit; end; end; // notez que ici, l'utilisateur doit avoir des autorisations de lecture et d'écriture dans le répertoire actuel de l'application si FileExists ('wz.txt') puis sysutils.deletefile ('wz.txt' ); if fileExists ('zp.bmp') alors synutils.deletefile ('zp.bmp'); if fileExists ('zp.wlt') alors sysutils.deletefile ('zp.wlt'); // pansichar (anSistring ('zp.wlt'); // pansichar (ANSSISTRING ( Str)) iret: = sdt_readbasemsgtofile (edziportid, pansichar (ansistring ('wz.txt')), puichmsglen, pansichar (anSistring ('zp.wlt')), puiphmsglen, 1); if iret <> 144 alorsBeginsdt_closeport (edzipordid) ; // Application.MessageBox (TIP_ICREADER_READ_FAILED, TIP_TITLE); AERRMSG: = TIP_ICREADER_READ_FAILED; Result: = FALSE; Exit; end; // Le suivant est pour analyser la photo. Fabricant dans le répertoire racine du disque C, la résolution photo échouera si Busbport theNiret: = getBMP (Pansichar (ANSistring ('zp.wlt')), 2) Elseiret: = getBMP (Pansichar (ANSistring ('ZP.Wlt' )), 1); cas iret de0: beginApplication.MessageBox (TIP_ICREADER_CALL_DLL_FAILED, TIP_TITLE); Extend_failed , Tip_title); fin; -3: BeginApplication.MessageBox (TIP_ICREADER_WLT_FILE_OPEN_FAILED, TIP_TITLE); End; -4: BeginApplication.MessageBox (TIP_ICREADER_WLT_FILE_FORMAT_FAIL Titre); fin; -6 : BeginApplication.MessageBox (TIP_ICREADER_DEVICE_FAILED, TIP_TITLE); end; end; sdt_closeport (edziportid); Acardinfo)); fs.free; //// name: ANSistring (idCardinfo.Name); // Gender: If anSistring (idCardinfo.sex) = '1' alors genre: = 'mâle' else Shen: = 'Female' ; // Ethnique: Ethnicnotoname (ANSistring (idCardinfo.Nation)); // Année de naissance Mois et date: FormatDatestr (ANSistring (idCardinfo.Birthday)); // Adresse: Adresse: = Trim (ANSistring (idCardinfo.Addr))) ; // Numéro d'identification: id: = TRIM (ANSistring (idCardinfo.idsn)); / / Certificate Agency Agency: Place: = TRIM (ANSistring (idCardinfo.issueOgan)); // Date de frais Démarrer ValidDateStart: = FormatDatestr (ANSistring ( idCardinfo.vaildbegin)); // Date de frais End If Trim (ANSistring (idCardinfo.vailDend)) = 'Long-Tter' alors // ValidDateend: = FormatDatetime ('Yyy-mm-dd', maxDateTime) // else // ValidDateend: = FormatDatestr (ANSistring (idCardInfo.vailDend)); // Résultat: = TRUE; end; '+' = '+' Mongol '); ajouter ('03' + '=' + 'hui People'); ajouter ('04 '+' = '+' tibétan '); add ('05' + ' = '+' Uyghour People '); ajouter ('06' + '=' + 'miao peuple'); ajouter ('07 '+' = '+' yi peuple '); ajouter ('08' + '=' + 'Zhuang People'); ajouter ('09 '+' = '+' buyi peuple '); ajouter (' 10 '+' = '+' coréen '); ajouter ('11' + '=' + 'manchu '); Ajouter ('12' + '=' + 'dong'); add ('13 '+' = '+' yao peuple '); add ('14' + '=' + 'bai peuple'); Ajouter ('15 '+' = '+' Tujia People '); ajouter ('16' + '=' + 'hani peuple'); ajouter ('17 '+' = '+' kazakhs '); add (' 18 '+' = '+' Dai People '); ajouter ('19' + '=' + 'li peuple'); ajouter ('20 '+' = '+' lisu peuple '); add ('21' + '=' + 'Wa People'); Add ('22 '+' = '+' She 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'); ajouter ('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' + '=' + 'Tribe russe'); add ('45' + '=' + 'ewenki'); add ('46 '+' = '+' De'ang '); add ('47' + '=' + 'baoan'); add ('48 '+' = '+' yugu tribu '); add ('49' + '=' + 'Jing Tribe '); Ajouter ('50' + '=' + 'tatar tribu'); add ('51 '+' = '+' dulong clan '); ajout ('52' + '=' + 'oqqen clan') ; Ajouter ('53 '+' = '+' hezhe clan '); add ('54' + '=' + 'meneba'); add ('55 '+' = '+' luba '); add (' 56 '+' = '+' kino '); ajouter ('57' + '=' + 'autres'); ajouter ('98 '+' = '+' naturalisation étrangère '); end; finalisationlstethnic.free; end .//Please préparez sdtapi.dll wlts.dll wlts.lic à l'avance, mettez le même répertoire