Programmation d'un lecteur de carte d'identité belge en Delphi, l'ACR38U
Publié le 14/03/2006 Dans Programmation
On code!
Importons donc la description de cet ActiveX dans Delphi, pour cela rien de plus simple, Component/Import ActiveX Control, et il faut chercher la librairie EIDLibCtrl.

images/articles/article490/003.png

Une fois importée, nous avons une unité avec toutes les fonctions nécessaires pour accéder à la carte d'identité, y compris le support du lecteur SmartCard. Cela semble donc un jeu d'enfant.

  1.   TEIDlib = class(TOleControl) 
  2.   private 
  3.     FIntf: IEIDlib; 
  4.     function  GetControlInterface: IEIDlib; 
  5.   protected 
  6.     procedure CreateControl; 
  7.     procedure InitControlData; override; 
  8.   public 
  9.     function Init(const strReaderName: WideString; lOCSP: Integer; lCRL: Integer;  
  10.                   out plHandle: Integer): IRetStatus; 
  11.     function Exit: IRetStatus; 
  12.     function GetID(out ppMapCollection: IMapCollection; out ppCertifCheck: ICertifCheck): IRetStatus; 
  13.     function GetAddress(out ppMapCollection: IMapCollection; out ppCertifCheck: ICertifCheck): IRetStatus; 
  14.     function GetPicture(out ppMapCollection: IMapCollection; out ppCertifCheck: ICertifCheck): IRetStatus; 
  15.     function GetVersionInfo(bSignature: Integer; out ppMapCollection: IMapCollection;  
  16.                             out pvtSignature: OleVariant): IRetStatus; 
  17.     function BeginTransaction: IRetStatus; 
  18.     function EndTransaction: IRetStatus; 
  19.     function FlushCache: IRetStatus; 
  20.     function SelectApplication(vtApplication: OleVariant): IRetStatus; 
  21.     function SendAPDU(vtCommand: OleVariant; const pPIN: IPin; out pvtResponse: OleVariant): IRetStatus; 
  22.     function VerifyPIN(const pPIN: IPin; const bstrPin: WideString; out plTriesLeft: Integer): IRetStatus; 
  23.     function ChangePin(const pPIN: IPin; const strOldPin: WideString; const strNewPin: WideString;  
  24.                        out plTriesLeft: Integer): IRetStatus; 
  25.     function GetPinStatus(const pPIN: IPin; bSignature: Integer; out pvtSignature: OleVariant;  
  26.                           out plTriesLeft: Integer): IRetStatus; 
  27.     function ReadFile(const pPIN: IPin; vtFileId: OleVariant; out pvtData: OleVariant): IRetStatus; 
  28.     function WriteFile(const pPIN: IPin; vtFileId: OleVariant; vtData: OleVariant): IRetStatus; 
  29.     function SetRawData(const pRaw: IRaw): IRetStatus; 
  30.     function GetRawData(out ppRaw: IRaw): IRetStatus; 
  31.     property  ControlInterface: IEIDlib read GetControlInterface; 
  32.     property  DefaultInterface: IEIDlib read GetControlInterface; 
  33.   published 
  34.     property Anchors; 
  35.   end;


La documentation étant assez complète, on nous explique qu'il suffit de faire un Init, puis un GetID pour avoir les informations contenues sur la carte. Qu'il en soit donc ainsi:

  1. procedure TForm1.FormCreate(Sender: TObject); 
  2. var 
  3.  lHandler: Integer; 
  4. begin 
  5.   FEID := TEIDlib.Create(self); 
  6.   FEID.Init(''00, lHandler); 
  7. end
  8. procedure TForm1.FormDestroy(Sender: TObject); 
  9. begin 
  10.   FEID.Exit; 
  11.   FreeAndNil(FEID); 
  12. end;


Pour pouvoir compiler facilement le projet sans devoir installer le composant, le TEIDLib est créé à la volée, rien de très complexe en soit. Vu qu'un Init doit être terminé par un Exit, il suffit de rajouter un Exit dans le Destroy du form et le tour est joué.
Commentaires
Editer  Citer
BeID - Pin Validation
Très chouette article,

il serait intéressant d'avoir un exemple un peu plus complexe, par exemple incluant une vérification de PinCode. C'est documenté, mais assez mal... Surtout via ActiveX. D'ailleurs l'exemple VB ne le reprend pas...

Cedric
Par CedricS, Publié le 17/08/2006 @ 15:23:27
Editer  Citer
Programmation d'un lecteur de carte d'identité belge en Del...
Bonjour,

Est-il possible d'exécuter ce programme SANS installer le ressource Kit ?
Car en VB je n'y arrive pas.

Merci
Par SuperPat, Publié le 25/09/2006 @ 10:13:25
Editer  Citer
Programmation d'un lecteur de carte d'identité belge en Del...
Non, il faut le Ressource Kit.

Pour la vérification du PinCode, si ma mémoire est bonne c'est fait au niveau logiciel quand on essaie d'accéder aux données (je pense que c'était même du java), mais c'est juste un lecteur de toute façon, pas question de modifier quoi que ce soit sur la carte.

Mais c'est pas faux sinon, la documentation est limitée, d'ou la vente d'un SDK avec une grosse documentation, il faut bien le justifier :grin: *tousse*
Par zion, Publié le 04/10/2006 @ 15:55:40
Editer  Citer
Programmation d'un lecteur de carte d'identité belge en Del...
Après avoir installé le runtime, le problème c'est que j'ai pas la librairie activeX :siffle
Par cauet, Publié le 17/10/2006 @ 01:30:49
Editer  Citer
Programmation d'un lecteur de carte d'identité belge en Del...
Bonjour, j'ai installé Delphi Pro mais je ne trouve pas la librairie EIDLibCtrl. dans component/Activex.
Auriez le DLL ou OCX pour que je l'installe ? merci
Par larnaud, Publié le 11/02/2012 @ 11:54:32
Editer  Citer
Programmation d'un lecteur de carte d'identité belge en Del...
j'utilise Delphi 7 SE
Par larnaud, Publié le 11/02/2012 @ 11:55:00
Editer  Citer
Programmation d'un lecteur de carte d'identité belge en Del...
Il faut télécharger l'eID Middleware sur eid.belgium.be comme précisé dans l'article :smile:
Par zion, Publié le 13/02/2012 @ 18:05:48

Poster un commentaire
Vous devez être identifié pour accéder à cette fonctionnalité

Utilisateur
Mot de passe
 
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?