उम्र की जाँच अब एक चेकबॉक्स नहीं रही, यह एक इंजीनियरिंग काम बन गई है। UK में Online Safety Act कुछ सेवाओं से ऐसी उम्र जाँच की माँग करता है जो "अत्यधिक प्रभावी" हो। EU में यूरोपीय आयोग ने एक ब्लूप्रिंट प्रकाशित किया है, जिससे आप बाक़ी कुछ भी सौंपे बिना साबित कर सकते हैं कि आपकी उम्र 18 से ज़्यादा है। दोनों ही पहचान दस्तावेज़ों को एक रास्ते के रूप में गिनाते हैं।
यह पोस्ट उन डेवलपर्स के लिए है जिनसे "उम्र सत्यापन जोड़ने" को कहा गया है और जो जानना चाहते हैं कि ID दस्तावेज़ का स्कैन इसमें कहाँ फ़िट होता है। इसमें बताया गया है कि UK और EU के प्राधिकरण कौन-से तरीके गिनाते हैं, पासपोर्ट या ID कार्ड का स्कैन क्या साबित करता है और क्या नहीं, जन्मतिथि को "ऊपर/नीचे" के जवाब में कैसे बदलें, और बाद में क्या रखें। नीचे का हर उद्धरण संबंधित प्राधिकरण के अपने पेज से लिया गया है और जहाँ आता है वहीं उसका लिंक दिया गया है; उद्धरण अंग्रेज़ी मूल में रखे गए हैं और उनके बाद छोटा अनुवाद है।
यह doc.cheap का ब्लॉग है, जो एक पासपोर्ट और ID OCR API है। प्रोडक्ट वाला हिस्सा यह ध्यान में रखकर पढ़ें।
UK: पैमाना है "अत्यधिक प्रभावी"
यह दायित्व Online Safety Act 2023 की धारा 12 में है। सबसे हानिकारक तरह की सामग्री के लिए सेवा प्रदाता को "use age verification or age estimation (or both) to prevent children of any age from encountering primary priority content that is harmful to children" (किसी भी उम्र के बच्चों को बच्चों के लिए हानिकारक प्राथमिक-प्राथमिकता वाली सामग्री तक पहुँचने से रोकने के लिए उम्र सत्यापन या उम्र अनुमान, या दोनों, का उपयोग करना) होगा। और जाँच "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." (ऐसी हो और इस तरह इस्तेमाल हो कि यह सही-सही तय करने में अत्यधिक प्रभावी हो कि कोई विशेष उपयोगकर्ता बच्चा है या नहीं) होनी चाहिए।
धारा 230 दोनों शब्दों की परिभाषा देती है। उम्र सत्यापन "means any measure designed to verify the exact age of users" (का मतलब है उपयोगकर्ताओं की सटीक उम्र सत्यापित करने के लिए बनाया गया कोई भी उपाय), दायरे में आने वाली सेवा के लिए। उम्र अनुमान "means any measure designed to estimate the age or age-range of users" (का मतलब है उपयोगकर्ताओं की उम्र या उम्र-सीमा का अनुमान लगाने के लिए बनाया गया कोई भी उपाय)। यह सबसे आसान शॉर्टकट भी बंद कर देती है: "A measure which requires a user to self-declare their age (without more) is not to be regarded as age verification or age estimation." (जो उपाय उपयोगकर्ता से केवल अपनी उम्र ख़ुद घोषित करवाता है, उसे उम्र सत्यापन या उम्र अनुमान नहीं माना जाएगा।)
UK की संचार निगरानी संस्था Ofcom, Part 3 सेवाओं के लिए अपनी अत्यधिक प्रभावी उम्र आश्वासन पर गाइडेंस में इस पैमाने को समझाती है (अपडेटेड संस्करण 24 अप्रैल 2025 का है)। सेक्शन 3 उन तरीकों की "a non-exhaustive list" (एक अपूर्ण, यानी उदाहरणात्मक सूची) देता है जिन्हें वह अत्यधिक प्रभावी होने में सक्षम मानती है:
| Ofcom की सूची का तरीका | क्या इसमें ID दस्तावेज़ शामिल है |
|---|---|
| ओपन बैंकिंग | नहीं |
| फ़ोटो-पहचान (photo-ID) मिलान | हाँ, दस्तावेज़ ही सबूत है |
| चेहरे से उम्र का अनुमान | नहीं |
| मोबाइल नेटवर्क ऑपरेटर की उम्र जाँच | नहीं |
| क्रेडिट कार्ड जाँच | नहीं |
| ईमेल पर आधारित उम्र अनुमान | नहीं |
| डिजिटल पहचान सेवाएँ | अक्सर, जब पहचान पहली बार सत्यापित होती है |
Ofcom फ़ोटो-ID मिलान का वर्णन ऐसे करती है: यह "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." (अपलोड किए गए फ़ोटो-ID दस्तावेज़ से संबंधित जानकारी लेकर और ID अपलोड के समय ली गई उपयोगकर्ता की छवि से उसकी तुलना करके यह सत्यापित करता है कि दोनों एक ही व्यक्ति हैं।)
यही सेक्शन यह भी बताता है कि क्या मान्य नहीं है, जिसमें शामिल है "asking a user to input their date of birth without further evidence to confirm this information" (उपयोगकर्ता से जन्मतिथि डालने को कहना, बिना किसी और सबूत के जो इस जानकारी की पुष्टि करे)। टाइप की गई जन्मतिथि स्व-घोषणा है। दस्तावेज़ से पढ़ी गई जन्मतिथि सबूत है, और Ofcom की बाक़ी गाइडेंस इसी बारे में है कि वह सबूत कितना अच्छा होना चाहिए।
EU: उम्र के प्रमाण पर बना ब्लूप्रिंट
EU की ओर से आयोग ने 14 जुलाई 2025 को उम्र सत्यापन ब्लूप्रिंट का पहला संस्करण जारी किया। उसके अपने शब्दों में, ब्लूप्रिंट "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." (एक ऐसा तरीका देता है जिससे उपयोगकर्ता प्रतिबंधित वयस्क सामग्री, जैसे ऑनलाइन पोर्नोग्राफ़ी, तक पहुँचते समय कोई और निजी जानकारी बताए बिना साबित कर सकें कि वे 18 से ऊपर हैं।)
यह डिज़ाइन जाँच को उपयोग से अलग करता है। उपयोगकर्ता की "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." (उम्र जारीकर्ता जन्मतिथि जैसे विस्तृत निजी डेटा से सत्यापित करेगा, लेकिन ऑनलाइन सेवाओं को बिना किसी और निजी विवरण के केवल यह प्रमाण मिलेगा कि उपयोगकर्ता 18 से ऊपर है।)
पहचान दस्तावेज़ पहले चरण में आते हैं। आयोग का ब्लूप्रिंट पर तथ्य पेज उम्र के प्रमाण के स्रोत गिनाता है: "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." (राष्ट्रीय eID, पासपोर्ट और ID कार्ड, उम्र की जानकारी वाले पहले से इंस्टॉल ऐप जैसे बैंकिंग ऐप, या ऑफ़लाइन तृतीय-पक्ष सक्रियण जैसे डाकघर।) वह आगे जोड़ता है: "In October 2025, a second version of the blueprint was released with a passport and identity card method to generate a proof of age." (अक्टूबर 2025 में ब्लूप्रिंट का दूसरा संस्करण जारी हुआ, जिसमें पासपोर्ट और पहचान पत्र से उम्र का प्रमाण बनाने का तरीका है।)
तो दोनों जगह दस्तावेज़ एक मान्य इनपुट है। पर किसी भी जगह अकेली दस्तावेज़ की फ़ोटो पूरी जाँच नहीं है।
स्कैन क्या साबित करता है, और क्या नहीं
दस्तावेज़ का स्कैन एक सवाल का जवाब अच्छी तरह देता है: इस दस्तावेज़ पर क्या लिखा है? यह जन्मतिथि, समाप्ति तिथि, दस्तावेज़ का प्रकार और मशीन रीडेबल ज़ोन (MRZ) पढ़ता है, और बता सकता है कि ज़ोन के चेक डिजिट सही बैठते हैं या नहीं। Ofcom के वर्णन में "संबंधित जानकारी लेने" वाला हिस्सा यही है।
उम्र जाँच को जिन बाक़ी सवालों का जवाब देना होता है, उनका जवाब यह नहीं देता:
- क्या व्यक्ति ही दस्तावेज़ का धारक है? Ofcom का मज़बूती वाला सेक्शन सबसे सीधा रास्ता बताता है: "a child user uploading an image of an ID that does not belong to them." (कोई बच्चा उपयोगकर्ता ऐसी ID की छवि अपलोड करे जो उसकी नहीं है।) इसका जवाब है: "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." (फ़ोटो-ID मिलान में ID अपलोड के समय उपयोगकर्ता की फ़ोटो माँगना यह सत्यापित करने में मदद करता है कि फ़ोटो ID उसी उपयोगकर्ता की है।)
- क्या व्यक्ति मौजूद है? "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." (लाइवनेस डिटेक्शन यह सुनिश्चित करके अतिरिक्त भरोसा देता है कि जाँच के समय उम्र आश्वासन प्रक्रिया से गुज़र रहा उपयोगकर्ता मौजूद है, ताकि कोई बच्चा किसी वयस्क की फ़ोटो अपलोड न कर दे।)
- क्या दस्तावेज़ असली है? "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." (मज़बूत फ़ोटो-ID जाँच को आसानी से चकमा नहीं दिया जा सकना चाहिए, इसलिए इस तरीके को ऐसे जाली दस्तावेज़ या छेड़छाड़ पकड़नी चाहिए जो कोई बच्चा बना या हासिल कर सकता है।)
इनमें से कोई भी OCR नहीं है। दस्तावेज़ पढ़ना और उसे सत्यापित करना अलग-अलग काम हैं, जो अलग-अलग टूल करते हैं, और दस्तावेज़ों पर बनी उम्र जाँच को दोनों चाहिए। पढ़ने का चरण आपको दस्तावेज़ के बारे में भरोसेमंद डेटा देता है; चेहरे का मिलान, लाइवनेस जाँच और प्रामाणिकता जाँच बताते हैं कि दस्तावेज़ और व्यक्ति पर भरोसा करें या नहीं।
जन्मतिथि से "ऊपर" या "नीचे" तक
जन्मतिथि पढ़ ली जाए तो उम्र का हिसाब छोटा है, पर उसमें ग़लती करना आसान है। सिर्फ़ साल घटाना काफ़ी नहीं: 20 नवंबर 2008 को जन्मा व्यक्ति 10 नवंबर 2026 को 17 साल का है, 18 का नहीं। महीने और दिन की भी तुलना करें।
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
व्यवहार में कुछ बारीकियाँ मायने रखती हैं:
- जाँच की तारीख़ इस्तेमाल करें, एक ही टाइम ज़ोन में। आधी रात के आसपास सर्वर का "आज" और उपयोगकर्ता का "आज" अलग हो सकते हैं। एक नियम चुनें और इस्तेमाल की गई तारीख़ लॉग करें।
- 29 फ़रवरी। ऊपर की तुलना के साथ, 29 फ़रवरी को जन्मा व्यक्ति बिना लीप वाले सालों में 1 मार्च को नई उम्र में पहुँचता है। अगर आपका क्षेत्राधिकार इसे अलग तरह से परिभाषित करता है, तो सिर्फ़ वह एक ब्रांच बदलें।
- गायब तारीख़ कोई जवाब नहीं है। अगर स्कैन कोई जन्मतिथि नहीं लौटाता, तो नतीजा "जाँच नहीं हो सकी" है, कभी भी "18 से ऊपर" नहीं।
- समाप्ति एक अलग सवाल है। एक्सपायर दस्तावेज़ मान्य सबूत है या नहीं, यह आपकी नीति है, इसलिए समाप्ति तिथि पढ़ें और यह फ़ैसला स्पष्ट रूप से लें।
जवाब रखें, दस्तावेज़ नहीं
आयोग का डिज़ाइन सेवाओं को "only a proof that the user is over 18" (केवल यह प्रमाण कि उपयोगकर्ता 18 से ऊपर है) भेजता है। यही विचार आपके अपने सिस्टम में भी काम करता है: जाँच पूरी होने के बाद आपको जो नतीजा चाहिए वह एक boolean और एक तारीख़ है, पासपोर्ट की छवि नहीं।
Ofcom का गोपनीयता वाला सेक्शन भी इसी ओर इशारा करता है। वह सेवा प्रदाताओं को याद दिलाता है कि "All age assurance methods involve the processing of personal data and should follow a data protection by design approach" (उम्र आश्वासन के सभी तरीकों में निजी डेटा की प्रोसेसिंग होती है और उन्हें डिज़ाइन से ही डेटा सुरक्षा वाले दृष्टिकोण का पालन करना चाहिए), और पालन किए जाने वाले सिद्धांतों में डेटा न्यूनीकरण और भंडारण सीमा को गिनाता है।
एक न्यूनतम रिकॉर्ड ऐसा दिखता है:
{
"user_id": "u_3f9c",
"check": "age_over_18",
"result": true,
"checked_on": "2026-11-10",
"method": "photo_id_matching"
}
न कोई छवि, न दस्तावेज़ नंबर, न जन्मतिथि। अगर कोई क़ानून आपसे इससे ज़्यादा रखने को कहता है, तो ठीक उतना ही रखें, एक ही स्टोर में जिसकी अपनी डिलीट होने की तारीख़ हो।
doc.cheap कहाँ फ़िट होता है
doc.cheap पासपोर्ट, ID कार्ड और ड्राइविंग लाइसेंस पढ़ता है और जो छपा है उसे JSON के रूप में लौटाता है। उम्र जाँच के लिए काम के फ़ील्ड हैं holder.birth_date, जो ISO YYYY-MM-DD तारीख़ या null है, साथ में document.expiry_date, document.is_expired और mrz.status, ताकि age_on में आप जो तारीख़ डालें वह ऐसी रीडिंग से आए जिसे आप ख़ुद जाँच सकें।
यह पढ़ने की सेवा है, सत्यापन की नहीं। केवल पहचान (recognition-only) वाले परिदृश्य में रिस्पॉन्स का authenticity.overall not_checked होता है, और चेहरे के मिलान व लाइवनेस के चरण उन्हीं के लिए बने टूल्स के पास रहते हैं। यह वह कुछ भी नहीं रखता जो आप न माँगें: लाइव key पर retain_hours: 0 कोई भी पंक्ति नहीं लिखता, जिसके बारे में हिस्ट्री रिटेंशन गाइड बताती है। छवि ख़ुद कभी स्टोर नहीं होती।
बाक़ी डिज़ाइन करने से पहले पढ़ने वाले चरण को आज़माने के लिए मुफ़्त पासपोर्ट OCR API से शुरू करें। अगर आप प्रदाता चुन रहे हैं, तो पासपोर्ट OCR API तुलना प्रकाशित क़ीमतें साथ-साथ रखती है।
यह एक इंजीनियरिंग सारांश है, क़ानूनी सलाह नहीं।
आपसे एक सवाल: आपकी उम्र जाँच का कौन-सा हिस्सा सही होने में सबसे ज़्यादा समय लेने वाला रहा – पढ़ना, चेहरे का मिलान या आपका रखा हुआ रिकॉर्ड? नीचे कमेंट में बताएँ।