Yaş kontrolü bir onay kutusu olmaktan çıkıp bir mühendislik işine dönüştü. Birleşik Krallık'ta Online Safety Act, bazı hizmetlerin "son derece etkili" yaş kontrolleri kullanmasını şart koşuyor. AB'de Avrupa Komisyonu, başka hiçbir bilgi vermeden 18 yaşın üzerinde olduğunuzu kanıtlamak için bir plan (blueprint) yayımladı. İkisi de kimlik belgelerini yollardan biri olarak sayıyor.
Bu yazı, kendisinden "yaş doğrulaması eklemesi" istenen ve kimlik belgesi taramasının bu işte nereye oturduğunu öğrenmek isteyen yazılımcılar için. Birleşik Krallık ve AB yetkili kurumlarının hangi yöntemleri saydığını, bir pasaport ya da kimlik kartı taramasının neyi kanıtlayıp neyi kanıtlamadığını, bir doğum tarihinin nasıl "üstünde/altında" cevabına dönüştürüleceğini ve sonrasında neyin saklanacağını anlatıyor. Aşağıdaki her alıntı, ilgili kurumun kendi sayfasından geliyor ve geçtiği yerde bağlantısı veriliyor; alıntılar İngilizce aslıyla bırakıldı, ardından kısa bir çevirisi var.
Burası doc.cheap'in blogu; doc.cheap bir pasaport ve kimlik OCR API'si. Ürünle ilgili kısmı bunu akılda tutarak okuyun.
Birleşik Krallık: çıta "son derece etkili"
Yükümlülük Online Safety Act 2023'ün 12. bölümünde yer alıyor. En zararlı içerik türleri için hizmet sağlayıcı "use age verification or age estimation (or both) to prevent children of any age from encountering primary priority content that is harmful to children" (her yaştan çocuğun çocuklara zararlı birinci öncelikli içerikle karşılaşmasını önlemek için yaş doğrulama ya da yaş tahmini veya ikisini birden kullanmak) zorunda. Kontrol de "of such a kind, and used in such a way, that it is highly effective at correctly determining whether or not a particular user is a child." (belirli bir kullanıcının çocuk olup olmadığını doğru belirlemede son derece etkili olacak türde ve biçimde kullanılmalı) olmalı.
230. bölüm iki terimi tanımlıyor. Yaş doğrulama, kapsamdaki bir hizmetin "means any measure designed to verify the exact age of users" (kullanıcılarının tam yaşını doğrulamak için tasarlanmış her türlü önlem) demek. Yaş tahmini "means any measure designed to estimate the age or age-range of users" (kullanıcıların yaşını ya da yaş aralığını tahmin etmek için tasarlanmış her türlü önlem) demek. Bölüm en kolay kestirmeyi de kapatıyor: "A measure which requires a user to self-declare their age (without more) is not to be regarded as age verification or age estimation." (Kullanıcıdan yalnızca yaşını kendisinin beyan etmesini isteyen bir önlem, yaş doğrulama ya da yaş tahmini sayılmaz.)
Birleşik Krallık'ın iletişim denetim kurumu Ofcom, bu çıtayı Part 3 hizmetleri için hazırladığı son derece etkili yaş güvencesi rehberinde açıklıyor (güncel sürüm 24 Nisan 2025 tarihli). 3. bölüm, son derece etkili olabileceğini düşündüğü yöntemlerin "a non-exhaustive list" (sınırlayıcı olmayan bir listesini) veriyor:
| Ofcom listesindeki yöntem | Kimlik belgesi işin içinde mi |
|---|---|
| Açık bankacılık | Hayır |
| Fotoğraflı kimlik (photo-ID) eşleştirme | Evet, belgenin kendisi kanıttır |
| Yüzden yaş tahmini | Hayır |
| Mobil şebeke operatörü yaş kontrolü | Hayır |
| Kredi kartı kontrolü | Hayır |
| E-posta tabanlı yaş tahmini | Hayır |
| Dijital kimlik hizmetleri | Çoğu zaman, kimliğin ilk doğrulandığı anda |
Ofcom, fotoğraflı kimlik eşleştirmeyi şöyle tarif ediyor: yöntem "works by capturing relevant information from an uploaded photo-ID document and comparing it to an image of the user at the point of ID upload to verify that they are the same person." (yüklenen fotoğraflı kimlik belgesinden ilgili bilgileri alır ve kimlik yüklendiği anda çekilen kullanıcı görüntüsüyle karşılaştırarak aynı kişi olduklarını doğrular).
Aynı bölüm yeterli sayılmayanları da sıralıyor; bunların arasında "asking a user to input their date of birth without further evidence to confirm this information" (bu bilgiyi doğrulayacak başka bir kanıt olmadan kullanıcıdan doğum tarihini girmesini istemek) var. Elle yazılan doğum tarihi bir beyandır. Belgeden okunan doğum tarihi ise bir kanıttır ve Ofcom rehberinin geri kalanı, bu kanıtın ne kadar iyi olması gerektiğini anlatıyor.
AB: yaş kanıtı üzerine kurulu bir plan
AB tarafında Komisyon, 14 Temmuz 2025'te yaş doğrulama planının ilk sürümünü yayımladı. Kendi ifadesiyle plan "provides a method to enable users to prove they are over 18 when accessing restricted adult content, such as online pornography, without revealing any other personal information." (kullanıcıların çevrim içi pornografi gibi kısıtlı yetişkin içeriğe erişirken başka hiçbir kişisel bilgiyi açıklamadan 18 yaşın üzerinde olduklarını kanıtlamalarını sağlayan bir yöntem sunar).
Tasarım, kontrolü kullanımdan ayırıyor. Kullanıcının "age will be verified by the issuer using detailed personal data, like the date of birth. However, online services will only receive a proof that the user is over 18, without any other personal details." (yaşı, düzenleyen taraf tarafından doğum tarihi gibi ayrıntılı kişisel verilerle doğrulanır; ancak çevrim içi hizmetler başka hiçbir kişisel ayrıntı olmadan yalnızca kullanıcının 18 yaşın üzerinde olduğuna dair bir kanıt alır).
Kimlik belgeleri ilk adımda devreye giriyor. Komisyonun plan hakkındaki bilgi sayfası, yaş kanıtının kaynaklarını "national eIDs, passports and ID cards, pre-installed apps with age info, such as banking apps, or offline third-party activation, such as post office." (ulusal eID'ler, pasaportlar ve kimlik kartları, bankacılık uygulamaları gibi yaş bilgisi içeren önceden yüklü uygulamalar ya da postane gibi çevrim dışı üçüncü taraf etkinleştirme) olarak sayıyor. Ayrıca şunu ekliyor: "In October 2025, a second version of the blueprint was released with a passport and identity card method to generate a proof of age." (Ekim 2025'te, pasaport ve kimlik kartıyla yaş kanıtı üreten bir yöntem içeren planın ikinci sürümü yayımlandı.)
Yani iki yerde de belge kabul gören bir girdi. Ama hiçbirinde tek başına bir belge fotoğrafı kontrolün tamamı değil.
Bir tarama neyi kanıtlar, neyi kanıtlamaz
Belge taraması tek bir soruyu iyi cevaplar: bu belgede ne yazıyor? Doğum tarihini, son geçerlilik tarihini, belge türünü ve makine tarafından okunabilir bölgeyi (MRZ) okur ve bölgenin kontrol hanelerinin tutup tutmadığını söyleyebilir. Ofcom'un tarifindeki "ilgili bilgileri alma" kısmı budur.
Bir yaş kontrolünün kapsaması gereken diğer soruları ise cevaplamaz:
- Kişi belgenin sahibi mi? Ofcom'un sağlamlık bölümü en bariz yolu adıyla anıyor: "a child user uploading an image of an ID that does not belong to them." (bir çocuk kullanıcının kendisine ait olmayan bir kimliğin görüntüsünü yüklemesi). Cevabı da şu: "Requiring a photo of the user at the point of ID upload when photo-ID matching helps to verify that the photo ID belongs to that user." (Fotoğraflı kimlik eşleştirmede, kimlik yüklenirken kullanıcının fotoğrafını istemek, fotoğraflı kimliğin o kullanıcıya ait olduğunu doğrulamaya yardımcı olur.)
- Kişi orada mı? "Liveness detection provides further confidence that a child user has not uploaded a photo of an adult by ensuring that the user undergoing the age assurance process is present at the time the check is carried out." (Canlılık tespiti, yaş güvencesi sürecindeki kullanıcının kontrol sırasında gerçekten orada olduğunu sağlayarak bir çocuğun bir yetişkinin fotoğrafını yüklemediğine dair ek güven verir.)
- Belge gerçek mi? "A robust photo-ID check should not be capable of being easily circumvented, and as such, a photo-ID method should be able to detect falsified documentation or manipulation that a child could create or obtain." (Sağlam bir fotoğraflı kimlik kontrolü kolayca atlatılamamalıdır; bu nedenle yöntem, bir çocuğun üretebileceği ya da edinebileceği sahte belgeleri veya oynanmış belgeleri tespit edebilmelidir.)
Bunların hiçbiri OCR değil. Bir belgeyi okumak ile onu doğrulamak, farklı araçların yaptığı ayrı işlerdir ve belgeye dayanan bir yaş kontrolü ikisine de ihtiyaç duyar. Okuma adımı size belge hakkında güvenilir veri verir; yüz eşleştirme, canlılık kontrolü ve özgünlük kontrolü ise belgeye ve kişiye güvenip güvenmeyeceğinizi söyler.
Doğum tarihinden "üstünde" ya da "altında" cevabına
Doğum tarihi okunduktan sonra yaş hesabı küçüktür ama yanlış yapması kolaydır. Yılları çıkarmak yetmez: 20 Kasım 2008'de doğan biri 10 Kasım 2026'da 18 değil 17 yaşındadır. Ayı ve günü de karşılaştırın.
from datetime import date
def age_on(birth_iso: str, on: date) -> int:
"""Whole years completed on the day `on`, from a YYYY-MM-DD date of birth."""
born = date.fromisoformat(birth_iso)
years = on.year - born.year
if (on.month, on.day) < (born.month, born.day):
years -= 1 # the birthday has not come yet this year
return years
def is_over(birth_iso: str, threshold: int, on: date) -> bool:
return age_on(birth_iso, on) >= threshold
print(age_on("2008-11-20", date(2026, 11, 10))) # 17
print(is_over("2008-11-20", 18, date(2026, 11, 20))) # True
Pratikte birkaç ayrıntı önemlidir:
- Kontrol tarihini tek bir saat diliminde kullanın. Gece yarısına yakın saatlerde sunucunun "bugün"ü ile kullanıcının "bugün"ü farklı olabilir. Tek bir kural seçin ve kullandığınız tarihi kayda geçirin.
- 29 Şubat. Yukarıdaki karşılaştırmayla 29 Şubat'ta doğan biri, artık yıl olmayan yıllarda yeni yaşına 1 Mart'ta girer. Yargı bölgeniz bunu farklı tanımlıyorsa o tek dalı değiştirin.
- Eksik tarih bir cevap değildir. Tarama doğum tarihi döndürmezse sonuç "kontrol edilemedi" olur, asla "18 yaş üstü" değil.
- Son geçerlilik ayrı bir sorudur. Süresi dolmuş bir belgenin kabul edilebilir kanıt olup olmadığı sizin politikanızdır; son geçerlilik tarihini okuyun ve bu kararı açıkça verin.
Belgeyi değil, cevabı saklayın
Komisyonun tasarımı hizmetlere "only a proof that the user is over 18" (yalnızca kullanıcının 18 yaşın üzerinde olduğuna dair bir kanıt) gönderiyor. Aynı fikir kendi sisteminizde de işe yarar: kontrol bittiğinde ihtiyacınız olan sonuç bir pasaport görüntüsü değil, bir boolean değer ve bir tarihtir.
Ofcom'un gizlilik bölümü de aynı yönü gösteriyor. Hizmet sağlayıcılara "All age assurance methods involve the processing of personal data and should follow a data protection by design approach" (tüm yaş güvencesi yöntemleri kişisel verilerin işlenmesini içerir ve tasarımdan itibaren veri koruma yaklaşımını izlemelidir) diye hatırlatıyor ve uyulacak ilkeler arasında veri minimizasyonunu ve saklama sınırlamasını sayıyor.
Asgari bir kayıt şöyle görünür:
{
"user_id": "u_3f9c",
"check": "age_over_18",
"result": true,
"checked_on": "2026-11-10",
"method": "photo_id_matching"
}
Görüntü yok, belge numarası yok, doğum tarihi yok. Bir yasa daha fazlasını saklamanızı istiyorsa tam olarak onu saklayın; kendi silme tarihi olan tek bir depoda.
doc.cheap nereye oturur
doc.cheap pasaportları, kimlik kartlarını ve sürücü belgelerini okur ve üzerlerinde basılı olanı JSON olarak döndürür. Bir yaş kontrolü için işe yarayan alanlar holder.birth_date (ISO biçiminde bir YYYY-MM-DD tarihi ya da null) ile document.expiry_date, document.is_expired ve mrz.status alanlarıdır; böylece age_on fonksiyonuna verdiğiniz tarih, sağlamasını yapabileceğiniz bir okumadan gelir.
Bu bir okuma hizmetidir, doğrulama hizmeti değil. Yalnızca tanıma senaryosunda yanıttaki authenticity.overall değeri not_checked olur; yüz eşleştirme ve canlılık adımları bunlar için yapılmış araçlarda kalır. Ayrıca istemediğiniz hiçbir şeyi saklamaz: canlı bir anahtarda retain_hours: 0 hiç kayıt yazmaz; bunu geçmiş saklama rehberi anlatıyor. Görüntünün kendisi hiçbir zaman saklanmaz.
Geri kalanını tasarlamadan önce okuma adımını denemek için ücretsiz pasaport OCR API'si ile başlayın. Bir sağlayıcı seçiyorsanız pasaport OCR API karşılaştırması yayımlanmış fiyatları yan yana koyuyor.
Bu bir mühendislik özetidir, hukuki tavsiye değildir.
Size bir soru: yaş kontrolünüzün en uzun sürede doğru hale gelen kısmı hangisiydi – okuma mı, yüz eşleştirme mi, yoksa sakladığınız kayıt mı? Aşağıdaki yorumlarda anlatın.