Gecorrigeerd op 20 oktober 2026: in een eerdere versie van dit artikel stond dat de EUDI Wallet uit de PID een booleaans
age_over_18afleidt, zodat de geboortedatum het apparaat nooit verlaat. De PID bevat geen leeftijdsattribuut: de verifier vraagt alleen de geboortedatum op en leidt het ja/nee zelf af;age_over_18bestaat alleen in de aparte leeftijdsattestatie (proof-of-age attestation). De codevoorbeelden gebruiken nu de echte API van@openeudi/core.
Het probleem met traditionele leeftijdsverificatie
De meeste hedendaagse leeftijdsverificatiesystemen werken door persoonsgegevens te verzamelen:
- Invoer van geboortedatum: gebruikers typen hun geboortedatum in. Geen verificatie. Makkelijk te liegen.
- Documentupload: gebruikers fotograferen hun identiteitsbewijs. U heeft nu een documentafbeelding met naam, adres, foto en documentnummer — veel meer data dan nodig om de vraag "is deze persoon ouder dan 18?" te beantwoorden.
- Leeftijdsschatting door derden: AI schat de leeftijd op basis van een selfie. Verwerking van biometrische gegevens met aanzienlijke AVG-implicaties.
Al deze benaderingen verzamelen meer data dan nodig om een eenvoudige ja/nee-vraag te beantwoorden.
Het privacy-first alternatief
Met verificatie via de EUDI Wallet werkt leeftijdscontrole anders:
U vraagt: "Is deze persoon 18 jaar of ouder?"
De wallet: deelt één ondertekend attribuut, verder niets
U bewaart: "Ja." (of "Nee.")
Geen naam. Geen document. Geen selfie. Geen biometrische gegevens. Bij de PID — de persoonsidentificatiegegevens die elke EUDI Wallet bevat — is dat ene attribuut de geboortedatum: de verifier ziet die één keer, leidt er het ja/nee uit af en gooit hem weg. Alleen de aparte leeftijdsattestatie beantwoordt age_over_18 zonder dat de geboortedatum het apparaat verlaat. In beide gevallen bewaart u alleen een booleaans resultaat, gedekt door de handtekening van een door de overheid vertrouwde uitgever.
Implementatie met OpenEUDI
Stap 1: installeren en configureren
import { VerificationService, DemoMode, VerificationType } from '@openeudi/core';
const service = new VerificationService({
mode: new DemoMode(), // Simulates the wallet; a production mode implements IVerificationMode
});
Stap 2: een leeftijdsverificatiesessie aanmaken
const session = await service.createSession({
type: VerificationType.AGE,
// That's all. No name, no address, no document: an age check only.
});
// session.walletUrl: render it as a QR code for the wallet
Het cruciale inzicht: wat de wallet deelt, hangt af van de credential. De PID bevat geen leeftijdsattribuut, dus een verificatiemodus vraagt alleen de geboortedatum op (selectieve openbaarmaking), toetst de 18+-grens en geeft uw code uitsluitend het booleaanse resultaat. Een leeftijdsattestatie (eu.europa.ec.av.1) bevat age_over_18 rechtstreeks, zodat de geboortedatum het apparaat niet verlaat — maar per oktober 2026 geeft alleen Denemarken die in productie uit.
Stap 3: het resultaat verwerken
service.on('session:verified', (session, result) => {
if (result.ageVerified) {
// Allow access to age-restricted content/product
allowPurchase();
}
});
service.on('session:rejected', (session, reason) => {
// Block access
showAgeRestrictionMessage();
});
Stap 4: wat u opslaat (bijna niets)
// Audit log, written inside the 'session:verified' handler — no PII
await db.verificationLogs.create({
sessionId: session.id,
verificationType: session.type, // VerificationType.AGE
result: result.ageVerified, // true/false — never the birth date
verifiedAt: session.completedAt,
// No name. No DOB. No document number. No PII.
});
WooCommerce-integratie
Voor WordPress-/WooCommerce-winkels die leeftijdsgebonden producten verkopen:
// The OpenEUDI WooCommerce plugin handles this automatically.
// In your WordPress admin:
// 1. Install the OpenEUDI Age Verification plugin
// 2. Go to WooCommerce → Settings → Age Verification
// 3. Select which product categories require verification
// 4. Choose verification threshold (18+, 21+)
// 5. Done.
De plugin voegt een verificatiestap toe vóór het afrekenen voor gemarkeerde producten. De klant scant een QR-code, keurt goed in zijn wallet, en de bestelling gaat door. Er worden door de plugin geen persoonsgegevens verzameld of opgeslagen.
AVG-analyse
Minimale gegevensverwerking (artikel 5, lid 1, onder c))
Traditionele leeftijdsverificatie verzamelt:
- Volledige naam, geboortedatum, documentnummer, documentafbeeldingen, selfie
Leeftijdsverificatie met OpenEUDI ontvangt:
- Eén attribuut — de geboortedatum uit de PID, of
age_over_18uit een leeftijdsattestatie — dat direct wordt teruggebracht tot een booleaans resultaat:trueoffalse
De AVG vereist dat persoonsgegevens "toereikend zijn, ter zake dienend en beperkt tot wat noodzakelijk is". Eén attribuut dat direct tot een booleaans resultaat wordt teruggebracht, komt dicht bij het minimum dat nodig is om leeftijd te verifiëren; het absolute minimum is de leeftijdsattestatie, die de geboortedatum helemaal niet prijsgeeft.
Opslagbeperking (artikel 5, lid 1, onder e))
Bij traditionele verificatie moet u:
- Bewaartermijnen vaststellen voor identiteitsdocumenten
- Veilige verwijderingsprocedures implementeren
- Reageren op inzage- en verwijderingsverzoeken van betrokkenen
Met OpenEUDI:
- Is het verificatieresultaat (
true/false) volgens de meeste interpretaties geen persoonsgegeven - Is de sessie-ID een willekeurige identificator zonder koppeling aan de persoon
- Is geen bewaarbeleid voor persoonsgegevens nodig, omdat er geen persoonsgegevens worden opgeslagen: de geboortedatum wordt weggegooid zodra het booleaanse resultaat vaststaat
Gegevensbeschermingseffectbeoordeling
Een DPIA is voor leeftijdsverificatie met OpenEUDI mogelijk niet vereist, omdat:
- Er geen systematische monitoring van personen plaatsvindt
- Er geen bijzondere categorieën van gegevens worden verwerkt
- Er geen grootschalige verwerking van persoonsgegevens plaatsvindt
- Het enige verwerkte attribuut (de geboortedatum) slechts kortstondig aanwezig is, en wat bewaard wordt (een booleaans resultaat) een minimaal risico voor betrokkenen vormt
Vergelijk dit met traditionele, op KYC gebaseerde leeftijdsverificatie, waarvoor door de verwerking van documentafbeeldingen en biometrische gegevens vrijwel zeker een DPIA vereist is.
Beschikbare leeftijdsattributen
Welk leeftijdsattribuut een verifier kan opvragen, hangt af van de credential in de wallet:
| Credential | Attribuut | Retourneert | Opmerkingen |
|---|---|---|---|
PID (eu.europa.ec.eudi.pid.1 / urn:eudi:pid:1) | birth_date (mdoc) / birthdate (SD-JWT VC) | Datum | Verplicht in elke PID; de verifier leidt elke grens af (16+, 18+, 21+) |
Leeftijdsattestatie (eu.europa.ec.av.1) | age_over_18 | Booleaans | Andere age_over_NN optioneel; per oktober 2026 één uitgever in productie (Denemarken) |
De PID zelf bevat geen age_over_NN-attribuut; leeftijdsattributen zijn in 2025 uit het PID-rulebook geschrapt. Voor een leeftijdscontrole vraagt eIDAS Pro alleen de geboortedatum uit de PID op, leidt daaruit een 18+-resultaat af en retourneert, bewaart of logt de geboortedatum nooit; wordt een leeftijdsattestatie getoond, dan gebruikt eIDAS Pro in plaats daarvan age_over_18. U ontvangt alleen het booleaanse resultaat — nooit de onderliggende persoonsgegevens. Landcompliance wordt afgehandeld via uw merchant whitelist-/blacklist-configuratie.
Landspecifieke overwegingen
Leeftijdsgrenzen voor verificatie variëren per land en product:
| Land | Alcohol | Tabak | Gokken |
|---|---|---|---|
| De meeste EU-landen | 18+ | 18+ | 18+ |
| Duitsland | 16+ (bier/wijn), 18+ (sterke drank) | 18+ | 18+ |
| België | 16+ (bier/wijn), 18+ (sterke drank) | 18+ | 21+ |
| Oostenrijk | 16+ (bier/wijn), 18+ (sterke drank) | 18+ | 18+ |
De OpenEUDI SDK bevat geen compliance-mapping per land: VerificationType.AGE is één leeftijdscontrole, gedocumenteerd als 18+. Een andere grens — 16+ voor bier in Duitsland, 21+ voor gokken in België — moet uw verificatiemodus zelf op de geboortedatum toepassen, want een leeftijdsattestatie garandeert alleen age_over_18.
De OpenEUDI SDK is Apache-2.0-gelicentieerd en gratis. Voor beheerde leeftijdsverificatie in productie (vandaag met bank-eID, beheerd WRPAC zodra dat verkrijgbaar is), zie de managed plannen van eIDAS Pro.
Gerelateerde artikelen
Leeftijdsverificatie implementeren in WooCommerce met eIDAS
Volledige gids voor het toevoegen van eIDAS-gebaseerde leeftijdsverificatie aan uw WooCommerce-winkel. Leer hoe u conforme, wrijvingsloze verificatie implementeert voor alcohol, tabak en andere leeftijdsgebonden producten.
11 min leestijd
AVG-naleving gemakkelijk gemaakt: hoe eIDAS gegevensverzameling minimaliseert
Leer hoe op eIDAS gebaseerde identiteitsverificatie perfecte AVG-naleving bereikt door gegevensminimalisatie, privacy-by-design-architectuur en gebruikerscontrole. Verminder uw gegevensaansprakelijkheid terwijl u de beveiliging verbetert.
11 min leestijd
Dit artikel delen
Help anderen meer te weten komen over eIDAS-verificatie