Belgische Identiteitskaart uitlezen (Beid) - Nieuwe Versie sinds maart 2014

Status
Niet open voor verdere reacties.
Even terug onder de aandacht brengen van deze vraag; het loopt eigenlijk reeds mis waar de initialisatie gebeurt bij
Code:
   Set RetStatus = EIDlib1.Init("", 0, 0, lhandle)
   Set RetStatus = EIDlib1.GetID(MapColID, CertifCheck)
Steek je een kaart uitgereikt voor maart 2015 in de lezer dan verloopt het uitlezen perfect en met de kaarten van na maart 2015 loopt het mis; dan zegt de code dat er geen kaart is ingestoken;
Schakel ik die controleblok uit dan krijg je bij het importeren een typemismatch fout.
 
't is nogal een specifiek probleem; kan de leverancier niet helpen? En wellicht eerst de oude driver helemaal de-installeren en dan opnieuw installeren? Op zich moet je de scanner wel aan de praat kunnen krijgen lijkt mij.
 
De leveranciers (Belgische staat) geeft geen ondersteuning meer en de lezer aan de praat krijgen is geen probleem; het lukt prima met de ID's van voor maart 2014
 
EID_wrapper

Na door de mensen van Fedict te zijn verwezen naar een aantal fora en gisteren daar beetje rondgestruind op een "EID_wrapper" van Jesper de Temmerman gestoten https://github.com/jdt Na installatie van die wrapper en aanpassing van de VBA code (zie bijlage of verderop) lukt het aardig nu om het grootste gedeelte aan data van de nieuwe én oude kaarten te halen (velden die (nog) niet werken zijn CardNumber, ChipNumber, IssuingMunicipality, BeginValidityDate, EndValidityDate en de foto). Vooral de foto is voor ons beetje jammer. Ben nog niet in contact kunnen treden met Jesper zelf. Misschien heeft iemand hier ideeën?
Code:
Private Sub CmdEIDTest_Click()
Dim wrapper As New EID_Wrapper.wrapper
Dim data As EID_Wrapper.CardData
    Set data = wrapper.GetCardData()
    ' Toon de EID Kaart Data in een messagebox
    MsgBox "Voornamen: " & (data.FirstNames) & vbCrLf & _[CODE]
"Naam: " & (data.Surname) & vbCrLf & _
"Geslacht: " & (data.Gender) & vbCrLf & _
"Geboortedatum: " & (data.BirthDate) & vbCrLf & _
"Geboorteplaats: " & (data.BirthPlace) & vbCrLf & _
"Straat en nummer: " & (data.StreetAndNumber) & vbCrLf & _
"Postcode: " & (data.ZipCode) & vbCrLf & _
"Woonplaats: " & (data.Municipality) & vbCrLf & _
"Nationaliteit: " & (data.Nationality) & vbCrLf & _
"Rijksregisternummer: " & (data.NationalNumber), vbInformation + vbOKOnly, "EID Kaart info"
End Sub[/CODE]

Code:
Private Sub CmdEIDTest2_Click()
On Error GoTo Err_CmdEIDTest2_Click
'*********************************
'VBA code voor uitlezen BEID met wrapper van Jesper de Temmerman
'Website maker wrapper:https://github.com/jdt
'VBA code aangepast door Johan Tack WZC Marialove Heestert
'Versie 3 2015-03-06
'*********************************
'Uitvoerende VBA code
Dim wrapper As New EID_Wrapper.wrapper
   Dim data As EID_Wrapper.CardData
   'BEID Persoons Info
   Dim strName As String
   Dim dirname As String
   Dim strFirstName1 As String
   Dim strConvertedFirstname As String
   Dim strConvertedSecondFirstname As String
   Dim strBirthPlace As String
   Dim strBirthDate As String
   Dim strConvertedBirthDate As String
   Dim strGender As String
   Dim strconvertedgender As String
   Dim strNationality As String
   Dim strNationalNumber As String

   'BEID Adres Info
   Dim notexists As Integer
   Dim exists As Integer
   Dim strstreetNumber As String
   Dim strConvertedStreet As String
   Dim strConvertedStreetNew As String
   Dim strZipCode As String
   Dim strMunicipality As String
   Dim iPos As Integer
   Dim iPos2 As Integer
    
    Set data = wrapper.GetCardData()
    ' Lees de EID Kaart Data
    strFirstName1 = (data.FirstNames)
    'methode indien de originele voornaam uit 2 woorden bestaat die dan omzettten naar twee aparte voornamen.
    ' oude identiteitskaarten had (soms) meerdere voornamen; de nieuwe slechts één
        If exists = InStr(strFirstName1, " ") = 0 Then
              strConvertedFirstname = Left([strFirstName1], InStr(1, [strFirstName1], " ") - 1)
              strConvertedSecondFirstname = Right([strFirstName1], Len([strFirstName1]) - InStrRev([strFirstName1], " "))
        Else
              strConvertedFirstname = (data.FirstNames)
        End If
    strName = (data.Surname)
    strGender = (data.Gender)
                If notexists = InStr(strGender, "M") = 0 Then
                    strconvertedgender = (data.Gender)
                End If
                If exists = InStr(strGender, "M") <> 0 Then
                    strconvertedgender = "V"
                End If
    strNationalNumber = (data.NationalNumber)
    strBirthDate = (data.BirthDate) ' de maand wordt in letters weergegeven en dan nog inconsistent; niet bruikbaar.
    'methode omzetten van rijksregisternummer naar geboortedatum; veel preciezer dus deze gebruiken
    strConvertedBirthDate = CDate(Mid$(strNationalNumber, 5, 2) & "/" & Mid$(strNationalNumber, 3, 2) & "/19" & Left$(strNationalNumber, 2))
    strBirthPlace = (data.BirthPlace)
    strZipCode = (data.ZipCode)
    strMunicipality = (data.Municipality)
    strNationality = (data.Nationality)
    strstreetNumber = (data.StreetAndNumber)
    ' google maps werkt niet goed met een straatnaam met gemeenteafkorting tussen haakjes in
    ' dit staat niet overal zo op de oude kaarten
    ' indien het zo op de EID staat smijten we de haakjes met alles wat er tussen staat weg
         
            If exists = InStr(strstreetNumber, "(") <> 0 Or InStr(strstreetNumber, ")") <> 0 Then
                        iPos = InStr(strstreetNumber, "(")
                        iPos2 = InStr(strstreetNumber, ")")
                        If iPos > 0 Then
                            strConvertedStreet = Left$(strstreetNumber, iPos - 1) & "" & Mid$(strstreetNumber, iPos2 + 1)
                        End If
            End If
    'velden invullen op het formulier met de data die we momenteel uit de BEID kaart kunnen halen met de wrapper
    
              Me.BNaam = Replace(Replace(Replace(strName, "ë", "ë"), "é", "é"), "è", "è")
              Me.BVoornaam = Replace(Replace(Replace(strConvertedFirstname, "ë", "ë"), "é", "é"), "è", "è")
              Me.[B2e voornaam] = Replace(Replace(Replace(strConvertedSecondFirstname, "ë", "ë"), "é", "é"), "è", "è")
              Me.BGeboorteplaats = strBirthPlace
              Me.BGeboortedatum = strConvertedBirthDate
              Me.TxtNationaliteit = strNationality
              Me.BRijksregisternummer = strNationalNumber
              Me.[BVPostcode vorige woonpl] = strZipCode
              Me.TxtBHuidige_postcode = strZipCode
              Me.BVWoonplaats = Replace(Replace(Replace(strMunicipality, "ë", "ë"), "é", "é"), "è", "è")
              Me.TxtBHuidige_Woonplaats = Replace(Replace(Replace(strMunicipality, "ë", "ë"), "é", "é"), "è", "è")
              Me.[BVStraat vorige woonpl] = strConvertedStreet
              Me.TxtBHuidige_straat = strConvertedStreet
              Me.[m/v] = strconvertedgender
              Me.TxtTotaal.Requery
              Me.AllowAdditions = False
              ' maak een map in de map bewonersdossier\fiches met de naam van de bewoner
              dirname = GetPath & "\Bewonersdossier\Fiches\" & Me.BNaam & " " & Me.BVoornaam
              If Dir(dirname, vbDirectory) = "" Then MkDir dirname

Exit_CmdEIDTest2_Click:
     Exit Sub
Err_CmdEIDTest2_Click:
     Select Case Err.Number
            Case 20 'Resume zonder Error
                    Resume Next
            Case 94 'Ongeldig gebruik van Null
                 MsgBox " Geen criteria, herbegin of vul het nodige veld in", vbCritical + vbOKOnly, "Opgelet!"
                    Resume Next
            Case 3021 ' Geen huidige record
                    Resume Next
            Case 3077  'Geen criteria
                    MsgBox " Geen criteria, herbegin", vbCritical + vbOKOnly, "Opgelet!"
                    Resume Next
            Case 3167  'Record is al verwijderd
                    Resume Next
            Case 9999
                   Resume Next
            Case 999
                   Resume Exit_CmdEIDTest2_Click
            Case Else
            Call LogError(Err.Number, Err.Description, "CmdEIDTest2_Click()")
                Resume Exit_CmdEIDTest2_Click
     End Select
End Sub
 

Bijlagen

Zijn deze problemen omwille van de kaartlezer ? Ik was alvast in de veronderstelling dat alles gewoon blijft werken na het installeren van de nieuwe eid software op de desbetreffende pc ...
 
Was dat maar waar :-). De oude VBA code in combinatie met de vroegere software kan de nieuwe chip niet uitlezen, de kaartlezer zelf heeft er niets mee te maken.
Jesper heeft ondertussen zijn EID_wrapper verbeterd; enkel de foto import is (mij) nog niet gelukt via de VBA weg.
 
De oorspronkelijke code kwam stond toch in het contract volgwagen of hebben we het hier over andere code ?

Dan zal ik mijn code ook moeten aanpassen
 
@conehead,

nu kan ik even niet volgen wat die volgwagen of contract betreft, wat heeft dit hiermee te maken?
Wat trouwens de wrapper betreft heeft Jesper gisteren een update gedaan met de mogelijkheid om de rest van de velden + en nu ook de foto via VBA uit te lezen en kan je dus die nieuwe versie downen (zie eerdere link).
Ik zet deze zaak voor mij alvast op opgelost.
 
Wel omdat ik precies de indruk heb dat ik een andere code gebruik, zie voorbeeld in bijlage.

En werkt deze wel met een nieuwe kaart ? Heb hier namelijk geen om te kunnen testen.

Dus indien er dit iemand kan testen zou dit handig zijn

alvast bedankt
 

Bijlagen

Conehead, je gebruikt mijn oude code en die zal dus niet werken met de nieuwe EID's en de wrapper.
Misschien best dat ik even een nieuw draadje start voor die nieuwe code wan tik heb deze vraag al op opgelost gezet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan