PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Lecture Carte D'identité BELGE
Lecture Carte D'identité BELGE
Débuté par Daniel DE HERDT, 14 juil. 2014 15:36 - 23 réponses
Posté le 14 juillet 2014 - 15:36
Hi,

Depuis Mars 2014, les nouvelles cartes d'identité ne sont plus visible
via mon code Windev (utilisant oBEID = allouer un objet Automation
"EIDLibCtrl.EIDLib").

Quelqu'un a-t-il un code attaquant le nouveau SDK du site eID
Middleware SDK 4.0 ?

http://eid.belgium.be/en/developing_eid_applications/eid_software_development_kit/

Merci d'avance

D.
Membre enregistré
17 messages
Posté le 11 août 2014 - 11:24
Bonjour,

As tu réussi à résoudre le problème ?
Ces nouvelles cartes commencent à arriver chez mes clients et je dois faire une mise à jour de mes programmes.
Posté le 18 août 2014 - 17:35
Non Toujours pas ! Désolé !

C'est étrange qu'il n'y a personne sur ce forum qui a trouvé la
solution !!

Si jamais j'avance sur ce problème , je mettrai une info sur le forum

ciao

Il se trouve que Laurent a formulé :
Bonjour,

As tu réussi à résoudre le problème ? Ces nouvelles cartes commencent à
arriver chez mes clients et je dois faire une mise à jour de mes programmes.
Membre enregistré
84 messages
Popularité : +4 (4 votes)
Posté le 19 août 2014 - 17:19
Bonjour,

Nous n'utilisons pas le Middleware belge mais directement les dll smartcard de Windows (ce que fait le middleware).
C'est un composant que nous utilisons chez nos clients depuis 3 ans sans aucun soucis.
Avec les nouvelles cartes, nous n'avons rien dû faire.

Si ça intéresse, mon adresse email est bne@dagico.com

Bonne journée,

--
Benoit Neve
Posté le 03 septembre 2014 - 16:14
Bonjour, y a-t-il des solutions pour ces nouvelles cartes d'identité ? Je ne vois pas comment faire ?
Merci !
Posté le 08 septembre 2014 - 15:37
Dagico a créé un composant qu'il propose à un certain prix et pouvant
être intégré dans n'importe quel projet Windev. (Voir email précédent)

Le fait de prendre les coordonnées de la carte n'est pas primordiale
pour moi... j'attendrai une version gratuite !

A+


Rudi L avait prétendu :
Bonjour, y a-t-il des solutions pour ces nouvelles cartes d'identité ? Je ne
vois pas comment faire ?
Merci !
Posté le 16 septembre 2014 - 11:52
Bonjour Daniel,

Après 2 semaines de recherches intensives sur internet et plusieurs essais infructueux, j'ai abandonné l'attaque directe.

Je sais que ma solution n'est pas idéale mais elle fonctionne parfaitement.

En fait, les dernières versions de eidviewer permettent d'enregistrer les données de la carte en .csv.

Donc, je lance eidviewer, puis je fais des 'Envoietouche'.

Je joins un exemple (Désolé si c'est à moitié en Néerlandais ;) ).

Phil

Info("1) Introduisez votre carte d'identité dans le lecteur","2) Attendez 5 secondes",...
"3) Le clavier doit être en lettres minuscules !","4) Cliquez sur OK et NE TOUCHEZ à PLUS RIEN")

Pad="C:\Temp\Certificats\"
FichierCSV=Pad+gpwRecupInfoUtilisateur(gpwInfoLogin)+".csv"
SI PAS fRépertoireExiste(Pad) ALORS
fRepCrée(Pad)
FIN
fSupprime(FichierCSV)

EidViewer="C:\Program Files (x86)\Belgium Identity Card\EidViewer\eID Viewer.exe"
SI fFichierExiste(EidViewer)=Faux ALORS
EidViewer="C:\Program Files\Belgium Identity Card\EidViewer\eID Viewer.exe"
FIN

LanceAppli(EidViewer,exeActif,exeNonBloquant)

Multitâche(1500)
EnvoieTouche("{BTNGAUCHE,15,30}")
Multitâche(50)
EnvoieTouche("{BAS}")
Multitâche(50)
EnvoieTouche("{BAS}")
Multitâche(50)
EnvoieTouche("{DROITE}")
Multitâche(50)
EnvoieTouche("{BAS}")
Multitâche(50)
EnvoieTouche("{ENTER}")
Multitâche(50)
EnvoieTouche(FichierCSV)
Multitâche(50)
EnvoieTouche("{ENTER}")
Multitâche(100)
EnvoieTouche("%{F4}")

Multitâche(200)

X=fChargeTexte(FichierCSV)

Prénom=ExtraitChaîne(X,5,";")
Nom=ExtraitChaîne(X,6,";")
NuméroNational=ExtraitChaîne(X,12,";")
Photo=Remplace(ExtraitChaîne(X,31,";")," ","")
Authentication=Remplace(ExtraitChaîne(X,59,";")," ","")
Posté le 18 septembre 2014 - 12:02
Bonjour Phil,

Comment fais-tu pour afficher l'image fournie sous format TXT dans le fichier CSV dans un projet Windev?
Perso, j'arrive à rien...
Membre enregistré
1 message
Posté le 24 décembre 2014 - 13:09
Il existe une solution qui n'utilise pas le Middelware officiel et qui fonctionne avec toutes les cartes EID, y compris les nouvelles.

On doit cette solution à Serhiy Perevoznyk (http://delphi32.blogspot.be/) qui a développé une librairie freeware nommée SWELIO disponible à l'adresse http://sdrv.ms/1jsF5PN.

Les fonctionalités:
• No external dependencies
• x32 and x64 versions
• All functions have Unicode and Ansi version
• Simple to use, easy to embed in any programming language
• C++ and Delphi SDK with samples and documenation are included
• Works in Windows XP - Windows 8
• Provides 256 different functions
• QR codes generation
• Export card data to XML
• Multiple readers support
• Exports photo in different graphical formats
• No eID Middleware required
• Hash functions and encryption supported
• Check of the pin code
• Can create and verify digital signatures
• Many other useful things...

Ci-dessous un exemple de l'utilisation de SWELIO avec Windev

gnHinst est un entier
gnHinst = ChargeDLL("Swelio32.dll.")
SI gnHinst = 0 ALORS
Erreur(ErreurInfo())
FIN

EIDIdentity est une structure
sCardNumber est une chaîne fixe sur 13
sChipNumber est une chaîne fixe sur 33
sValidityDateBegin est une chaîne fixe sur 11
sValidityDateEnd est une chaîne fixe sur 11
sMunicipality est une chaîne fixe sur 81
sNationalNumber est une chaîne sur 11
sName est une chaîne fixe sur 111
sFirstName1 est une chaîne fixe sur 96
sFirstName2 est une chaîne fixe sur 4
sNationality est une chaîne fixe sur 86
sBirthLocation est une chaîne fixe sur 81
sBirthDate est une chaîne fixe sur 13
sSex est une chaîne fixe sur 2
sNobleCondition est une chaîne fixe sur 51
nDocumentType est un entier
bWhiteCane est un booléen
bYellowCane est un booléen
bExtendedMinority est un booléen
FIN

EIDAddress est une structure
sStreet est une chaîne fixe sur 81
sZip est une chaîne fixe sur 5
sMunicipality est une chaîne fixe sur 68
FIN

EIDPicture est une structure
sPicture est une chaîne fixe sur 4096
nPictureLength est un entier sur 8
FIN

DonnéesIdentité est une EIDIdentity
DonnéesAdresse est une EIDAddress
DonnéesImages est une EIDPicture

API("Swelio32.dll", "StartEngine")

SI API("Swelio32.dll", "IsCardPresentEx", 0) ALORS

API("Swelio32.dll", "ReadIdentityExA", 0, &DonnéesIdentité)
Trace (DonnéesIdentité.sName, " ", DonnéesIdentité.sFirstName1)

API("Swelio32.dll", "ReadAddressExA", 0, &DonnéesAdresse)
Trace (DonnéesAdresse.sStreet, " ", DonnéesAdresse.sZip, " ",DonnéesAdresse.sMunicipality)

API("Swelio32.dll", "ReadPhotoEx", 0, &DonnéesImages )
IMG_Photo = DonnéesImages.sPicture

SINON
Trace ("Carte Absente")
FIN

API("Swelio32.dll", "StopEngine")
DéchargeDLL(gnHinst)
Posté le 25 décembre 2014 - 15:15
Bonjour AT,

ET merci à toi, ça marche super.

Eric
Membre enregistré
1 298 messages
Popularité : +20 (72 votes)
Posté le 16 avril 2015 - 15:43
A suivre

--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Membre enregistré
10 messages
Popularité : +1 (1 vote)
Posté le 28 avril 2015 - 05:28
Thank you for your development, that works wonders
Posté le 26 février 2016 - 13:35
Bonjour AT et merci pour cette solution.

Ce que je ne comprends pas est que l'instuction API("Swelio32.dll","IsCardPresentEx",0) me renvoie 0, comme si je n'avais pas de carte présente dans mon lecteur, alors que parallèlement, via le programme eID Viewer, je parviens à lire ma carte sans problème !?

As-tu une idée de ce que je devrais faire pour résoudre mon problème ?

Meci d'avance !
Posté le 20 janvier 2017 - 15:11
Super un grand merci ca dépanne bien.
Par contre pour info, j'ai remarqué que lors de la lecture de la carte le web cam s'active une seconde ??
Posté le 23 janvier 2017 - 13:49
Désolé
Rectification la webcam n'a rien a voir avec l'utilisation du lecteur de carte c'est une erreur de ma part.
Posté le 24 octobre 2017 - 10:40
Bonjour,
Un grand merci pour ce code vraiment génial.
Peut-on récupérer d'autres information sur la carte, comme la pays de naissance, la pays lié à l'adresse ?

Merci d'avance,
Francis
Membre enregistré
68 messages
Popularité : +2 (2 votes)
Posté le 24 octobre 2017 - 15:01
Bonjour,

J'ai aussi sur certains postes l' API("Swelio32.dll","IsCardPresentEx",0) qui me renvoie 0 alors qu'une carte est bien présente.

Est-ce que quelqu'un à pu résoudre ce problème ?

Merci d'avance

Eric
Posté le 25 octobre 2017 - 15:54
Bonjour
Je n'ai pas pu avoir l'API. Pas disponible.
Comment l'avoir ?
BAV
Membre enregistré
68 messages
Popularité : +2 (2 votes)
Posté le 25 octobre 2017 - 16:05
Bonjour,

C'est ici :

https://perevoznyk.wordpress.com/2015/10/06/swelio-1-8-released/

en tout cas pour le moment ;-)

Bàv
Posté le 20 novembre 2017 - 22:42
Bonjour,

Je ne comprends pas ...cela fonctionne parfaitement dans l'un de mes projet et dans le 2ième , le même code (copié/collé) ne me donne que l'adresse et pas le nom...

Et aussi, dans le projet ou cela ne fonctionne pas, windev me dit que "chaine fixe" est à remplacer.
Je l'ai remplacé par "chaine ANSI" , mais je n'obtiens toujours que l'adresse...

Help ?
Membre enregistré
10 messages
Popularité : +1 (1 vote)
Posté le 21 novembre 2017 - 15:29
Bonjour Martin,

Voilà ce que j'utilise, et cela fonctionne en 32 ou en 64 bits


// Non de la DLL

sVar_DLL est une chaîne = ""

SI EnMode64bits() = Vrai ALORS
sVar_DLL = "wd220Swelio64.dll."
SINON
sVar_DLL = "wd220Swelio32.dll."
FIN

// On vérifie si la DLL se charge
GnHinst est un entier système = ChargeDLL(sVar_DLL)

SI GnHinst = 0 ALORS
Erreur(ErreurInfo())
FIN


EIDIdentity est une Structure
sCardNumber est une chaîne fixe sur 13
sChipNumber est une chaîne fixe sur 33
sValidityDateBegin est une chaîne fixe sur 11
sValidityDateEnd est une chaîne fixe sur 11
sMunicipality est une chaîne fixe sur 81
sNationalNumber est une chaîne sur 11
sName est une chaîne fixe sur 111
sFirstName1 est une chaîne fixe sur 96
sFirstName2 est une chaîne fixe sur 4
sNationality est une chaîne fixe sur 86
sBirthLocation est une chaîne fixe sur 81
sBirthDate est une chaîne fixe sur 13
sSex est une chaîne fixe sur 2
sNobleCondition est une chaîne fixe sur 51
nDocumentType est un entier
bWhiteCane est un booléen
bYellowCane est un booléen
bExtendedMinority est un booléen
FIN


EIDAddress est une Structure
sStreet est une chaîne fixe sur 81
sZip est une chaîne fixe sur 5
sMunicipality est une chaîne fixe sur 68
FIN


EIDPicture est une Structure
sPicture est une chaîne fixe sur 4096
nPictureLength est un entier sur 8
FIN


stDonnéesIdentité est une EIDIdentity
stDonnéesAdresse est une EIDAddress
stDonnéesImages est une EIDPicture



//API("wd200Swelio32.dll","StartEngine")
API(sVar_DLL,"StartEngine")


//SI API("wd200Swelio32.dll","IsCardPresentEx",0) ALORS
SI API(sVar_DLL,"IsCardPresentEx",0) ALORS

// API("wd200Swelio32.dll","ReadIdentityExA",0, &stDonnéesIdentité)
// On rempli une zone répétée...
API(sVar_DLL,"ReadIdentityExA",0, &stDonnéesIdentité)

SAI_Date_Fin_Id = stDonnéesIdentité.sValidityDateEnd
SAI_Num_Id1 = stDonnéesIdentité.sCardNumber
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesIdentité.sName,"Nom : " )
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesIdentité.sFirstName1,"Prénom : " )
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesIdentité.sCardNumber,"Num Carte : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,DateVersChaîne(stDonnéesIdentité.sValidityDateBegin),"Date début : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,DateVersChaîne(stDonnéesIdentité.sValidityDateEnd),"Date fin : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesIdentité.sMunicipality,"Ville : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesIdentité.sNationalNumber,"Num National : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesIdentité.sNationality,"Nationalité : ")
// ZoneRépétéeAjouteLigne(ZR_Nom_EID,DateVersChaîne(stDonnéesIdentité.sBirthDate),"Date Naissance : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,DateVersChaîne(stDonnéesIdentité.sBirthDate),"Date Naissance : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesIdentité.sBirthLocation,"Lieu de naissance : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesIdentité.nDocumentType,"Document Type : ")

// API("wd200Swelio32.dll","ReadAddressExA",0, &stDonnéesAdresse)
API(sVar_DLL,"ReadAddressExA",0, &stDonnéesAdresse)

ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesAdresse.sStreet,"Rue : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesAdresse.sZip,"ZIP : ")
ZoneRépétéeAjouteLigne(ZR_Nom_EID,stDonnéesAdresse.sMunicipality,"Localité : ")


// API("wd200Swelio32.dll","ReadPhotoEx",0, &stDonnéesImages)
API(sVar_DLL,"ReadPhotoEx",0, &stDonnéesImages)
Femmes.Photo_EID = stDonnéesImages.sPicture
HModifie(Femmes)
FichierVersEcran()

SINON
Trace("Carte Absente")
FIN

//API("wd200Swelio32.dll","StopEngine")
API(sVar_DLL,"StopEngine")

DéchargeDLL(GnHinst)
Posté le 21 novembre 2017 - 18:26
Merci,

J'ai trouvé mon erreur donc je le poste ici pour info.
Le projet dans lequel cela ne fonctionnait pas était en configuration UNICODE et pas ANSI.

Mais votre code est intéressant, merci. Ca me donne des idées pour améliorer le miens.
Merci pour votre réponse.
Membre enregistré
82 messages
Popularité : +7 (7 votes)
Posté le 31 janvier 2018 - 23:58
Bonjour :)

J'ai un problème avec le champs documenttype (type de la carte), dans ma carte d'identité (Belge) je trouve un grand chiffre ex : 16777216,
Alors que normalement c'est un chiffre de 2 positions seulement, ce qui me permet de choisir l'un de ces types :
1:Belgian citizen
6:kids card (< 12 year)
7:bootstrap card
8:“habilitation/machtigings” card
11: card A
12: card B
. . .

C'est étrange que je me retrouve avec un chiffre de 7 ou 8 positions :( Une idée ?

PS : J'utilise la même bibliothèque a savoir "Swelio".

Merci.
Membre enregistré
82 messages
Popularité : +7 (7 votes)
Posté le 14 février 2018 - 16:34
Enfin :merci:

J'ai trouvé la réponse à ma question,
Si ça peut aider certains, je partage la solution pour récupérer le type de la carte d'identité Belge :
- Il faut convertir l'entier qui se trouve dans le champ nDocumentType en hexadécimal grâce à la fonction : EntierVersHexa().
- Puis récupérer la valeur numérique de valeur hexadécimal grâce à la fonction val().

Exemple :
- Avec une carte eID d'un citoyen Belge on retrouve la valeur : 16777216
sHexa est une chaîne = EntierVersHexa(DonnéesIdentité.nDocumentType,2) // ex : 16777216 => 01000000
Trace(Val(sHexa)) // 01000000 => 1 // donc eID Citoyen Belge.

Il y a plusieurs possibilités entre autres :
1: Belgian citizen
6: Kids card (<12 year)
7: Bootstrap card
11: Card A
12: Card B
13: Card C
. . . etc.

il s'agit d'un problème de présentation d'octets (Endianness) entre Swelio SDK et Windev, il faut donc bidouiller pour inverser les octets.

Bàv.