टाइपिंग टेस्ट हर स्कोर के पीछे के कीस्ट्रोक लॉग को जाँचकर चीटिंग पकड़ते हैं। हमारा टेस्ट हर नतीजे को उसके कीस्ट्रोक लॉग से दोबारा निकालता है, एक हैश जाँचता है, लॉग की बनावट और टाइमिंग परखता है, और 130 WPM से ऊपर का कोई भी समयबद्ध नतीजा जिसकी टाइमिंग भी असामान्य दिखे, पब्लिक बोर्ड से तब तक बाहर रखता है जब तक आप दोबारा टेस्ट पास न कर लें। टाइमिंग की जाँचें लापरवाह बॉट पकड़ती हैं; दोबारा टेस्ट सावधान बॉट से भी सब कुछ फिर से करवाता है।
हमारी टाइमिंग जाँचों को हराने वाला पहला बॉट हमारा अपना था।
हमारा एंड-टू-एंड टेस्ट हेल्पर 40 ms के तय अंतराल पर कुंजियाँ दबाता था, क्योंकि टेस्ट स्क्रिप्ट यही करती है। सर्वर ने नतीजा दोबारा निकाला, हैश की पुष्टि की, और उस रन को संदिग्ध माना: कीस्ट्रोक के बीच शून्य उतार-चढ़ाव, शून्य रोलओवर, एक जैसे होल्ड टाइम। इससे पहले कि हमारा अपना टेस्ट सूट इंसान जैसा दिखने वाला नतीजा भेज पाता, हमें हर शब्द पर बेतरतीब झटके (जिटर) और बीच-बीच में 80 से 300 ms के "सोचने" वाले ठहराव जोड़ने पड़े। यह विकल्प आज भी कोड में है, humanLike नाम से।
ये जाँचें हर उस चीज़ के ख़िलाफ़ काम करती हैं जो कोशिश नहीं करती, और जो कोशिश करती है वह इन्हें पार कर सकती है, इसलिए डिज़ाइन असली वज़न दोबारा टेस्ट पर डालता है।
पहला क़दम: सब कुछ दोबारा गिनना
आपका ब्राउज़र हमें WPM नहीं भेजता। वह कीस्ट्रोक लॉग भेजता है (हर keydown, keyup, input और composition इवेंट, एकदिशीय performance.now() घड़ी के टाइमस्टैम्प के साथ), उसके निकाले मेट्रिक्स, और कैनॉनिकल नतीजे का SHA-256 हैश।
सर्वर लॉग पर वही मेट्रिक कोड चलाता है और तुलना करता है। अगर कोई भी संख्या 0.01 से ज़्यादा अलग हो, तो नतीजा metrics_mismatch के रूप में ख़ारिज होता है। अगर हैश मेल न खाए, तो hash_mismatch के रूप में। WPM फ़ील्ड बदलने वाला ब्राउज़र एक्सटेंशन, जो क्लाइंट पर भरोसा करने वाली साइटों पर सबसे आम चीटिंग है, यहीं फ़ेल हो जाता है। आपकी स्क्रीन पर और डेटाबेस में संख्या एक ही फ़ंक्शन बनाते हैं, इसीलिए हमारा मेट्रिक्स पेज वादा कर सकता है कि उसका हल किया उदाहरण दशमलव के दो अंकों तक दोहराया जा सकता है।
टेस्ट का समय सर्वर पर क्यों न मापें? तब आपके स्कोर में नेटवर्क भी शामिल हो जाता। हर कीस्ट्रोक हम तक थोड़ी देर से पहुँचता, आपके कनेक्शन के हिसाब से अलग-अलग देरी से, और धीमी लाइन पर बैठा तेज़ टाइपिस्ट वह स्पीड खो देता जो उसके पास सच में थी। लॉग हमें सटीकता के लिए क्लाइंट की घड़ी देता है और ईमानदारी के लिए सर्वर की दोबारा गिनती।
दूसरा क़दम: क्या लॉग का कोई मतलब बनता है?
टाइमिंग के किसी भी विश्लेषण से पहले, भेजे गए नतीजे की बनावट पर सीधी-सादी जाँचें:
- टेस्ट कम से कम 15 सेकंड या 10 शब्द का होना चाहिए। छोटे रन रैंक करने के लिए बहुत अस्थिर होते हैं और उन्हें बढ़ाना सबसे आसान होता है।
- नतीजा टेस्ट के ख़त्म हो सकने से पहले नहीं आ सकता: उसकी शुरुआत और उसकी अपनी लंबाई। 60 सेकंड का नतीजा जो शुरू होने के बीस सेकंड बाद पहुँचे, वह हुआ ही नहीं।
- इवेंट की संख्या टाइप किए अक्षरों से मेल खानी चाहिए।
- डेस्कटॉप पर हर input इवेंट 50 ms के अंदर किसी keydown के बाद आना चाहिए। इससे पेस्ट किया टेक्स्ट, स्क्रिप्ट से भेजे input इवेंट और कीस्ट्रोक डालने वाले ज़्यादातर टूल पकड़े जाते हैं, जो बिना असली कुंजी के टेक्स्ट भेजते हैं। इनपुट मेथड एडिटर (IME composition) से टाइपिंग को छूट है, और फ़ोन के नतीजे पब्लिक बोर्ड से बाहर रहते हैं।
- जिस लॉग में शुरुआत न हो, अंत न हो, या टाइमस्टैम्प क्रम से न बढ़ें, वह बिगड़ा हुआ है और सीधे ख़ारिज होता है।
इसमें कुछ भी चतुराई वाला नहीं है, लेकिन यह ज़्यादातर कचरा हटा देता है।
तीसरा क़दम: कीस्ट्रोक टाइमिंग क्या बता सकती है?
यह वह हिस्सा है जिसे हम जान-बूझकर पूरा नहीं बताते: ख़ासियतों की सूची सार्वजनिक है, सीमाएँ और वज़न नहीं। प्रकाशित सीमा एक निशाना बन जाती है। अगर हम कहते कि "N मिलीसेकंड से कम स्टैंडर्ड डेविएशन पर फ़्लैग लगता है", तो हर स्क्रिप्ट का अगला वर्ज़न N प्लस एक जोड़ देता। जिन ख़ासियतों को हम स्कोर करते हैं:
कुंजियों के बीच औसत अंतर और वह कितना बदलता है। इंसानी टाइपिंग अनियमित होती है। Dhakal और साथियों की 2018 की 1,68,960 टाइपिस्टों वाली स्टडी में कुंजियों के बीच औसत अंतराल लगभग 239 ms था, और स्टैंडर्ड डेविएशन लगभग 112 ms। तय अंतराल पर टाइप करने वाली स्क्रिप्ट में लगभग कोई उतार-चढ़ाव नहीं होता; कीस्ट्रोक पर आधारित एक CAPTCHA की 2025 की arXiv स्टडी ने अपने टेस्ट बॉट में ठीक यही देखा, जो 50 ms की तय देरी से टाइप करता था। यह हमारा सबसे मज़बूत संकेत है, और इसी में हमारा हेल्पर फँसा था।
40 ms से छोटे अंतरों का हिस्सा। 40 ms का अंतर, लगातार बना रहे, तो एक मिनट में 1,500 अक्षर होते हैं, यानी पाँच अक्षर प्रति शब्द पर 300 WPM। रोलओवर में कुंजियाँ एक-दूसरे पर चढ़ने से उँगलियाँ इतने छोटे इक्का-दुक्का अंतर बनाती हैं, इसलिए एक छोटे अंतर का कोई मतलब नहीं। जिस लॉग में ऐसे छोटे अंतरों का बड़ा हिस्सा हो, वह टाइपिंग नहीं है।
कुंजी दबाए रखने का समय (होल्ड टाइम)। असली उँगलियों में यह दसियों मिलीसेकंड तक बदलता है; बनावटी इवेंट में अक्सर होल्ड टाइम एक जैसा या लगभग शून्य होता है, क्योंकि टूल keydown और keyup एक के तुरंत बाद एक भेजता है।
रोलओवर अनुपात। कितनी बार पिछली कुंजी उठने से पहले अगली दब जाती है। Dhakal ने औसत रोलओवर अनुपात 25% मापा, ज़्यादातर तेज़ टाइपिस्ट 40 से 70% कीप्रेस पर रोलओवर करते थे, और कुंजियाँ औसतन 30 ms तक एक-दूसरे पर चढ़ी रहती थीं। धीमे टाइपिस्ट लगभग इसका इस्तेमाल नहीं करते, इसलिए बिना रोलओवर वाला तेज़ नतीजा अलग दिखता है। बॉट शायद ही कभी कुंजियाँ एक-दूसरे पर चढ़ाते हैं।
सबसे लंबा ठहराव, सेकंड-दर-सेकंड स्पीड का उतार-चढ़ाव, और एक सेकंड से लंबे अंतरों का हिस्सा। लोग ऐसे झिझकते हैं जिसकी नक़ल करना स्क्रिप्ट को अलग से सिखाना पड़ता है।
एक स्कोरिंग मॉडल इन्हें मिलाता है और किसी नतीजे को संदिग्ध के रूप में फ़्लैग कर सकता है। 130 WPM से नीचे, फ़्लैग अपने आप कुछ भी ख़ारिज नहीं करता। आपका नतीजा आपसे कभी छिपाया नहीं जाता; ये जाँचें सिर्फ़ यह तय करती हैं कि वह रैंक होगा या नहीं।
क्या टाइपिंग टेस्ट की चीटिंग टाइमिंग जाँचों से बच सकती है?
हाँ, अगर चीटिंग सावधानी से बनाई गई हो। David Condrey के जनवरी 2026 के एक arXiv पेपर ने उन कीस्ट्रोक-टाइमिंग डिटेक्टरों को परखा जो इंसान के टाइप किए और AI से बने टेक्स्ट को अलग करने के लिए बने थे। उन्होंने पूरी तरह ऑटोमेटेड इंजेक्शन को पूरी सटीकता से अलग किया, लेकिन इंसानी टाइमिंग वाले हमले (कोई व्यक्ति AI का टेक्स्ट फिर से टाइप करे, या कोई प्रोग्राम इंसानी टाइपिंग डेटा से देरी चुने) पाँचों क्लासिफ़ायर से कम से कम 99.8% की दर से बच निकले। पेपर लेखक की पहचान के बारे में है, टाइपिंग टेस्ट के बारे में नहीं, लेकिन सबक़ यहाँ भी लागू होता है: तीसरा क़दम लापरवाहों को पकड़ता है, और ज़्यादा कुछ नहीं।
हमारा अपना टेस्ट हेल्पर छोटे पैमाने पर यही बात दिखाता है: बेतरतीब झटके और कुछ ठहराव उसे साफ़ तौर पर बनावटी से विश्वसनीय तक ले आए।
तो तीसरा क़दम एक छलनी है। फ़ैसला चौथे क़दम से आता है।
चौथा क़दम: सत्यापन वाला दोबारा टेस्ट
अगर कोई समयबद्ध नतीजा 130 WPM से ऊपर है और उसकी टाइमिंग भी असामान्य दिखती है, तो आप उसे देखते हैं और वह सेव होता है, लेकिन पब्लिक बोर्ड से तब तक बाहर रहता है जब तक आप सत्यापन वाला दोबारा टेस्ट पास न कर लें। यह एक नया 30 सेकंड का टेस्ट है, और आपको अपनी दावा की गई स्पीड के कम से कम 75% तक पहुँचना होता है। एक बार का संयोग या उधार का लॉग दूसरे रन में नहीं टिकता।
130 WPM ही क्यों? यह Dhakal के डेटा के 51.56 WPM औसत का लगभग ढाई गुना है, ज़्यादातर टाइपिस्टों से बहुत आगे, और जो सच में इतना तेज़ टाइप करता है, वह दो बार कर सकता है। अजीब टाइमिंग वाला अचानक तेज़ नतीजा वैसा ही दिखता है जैसा उधार का लॉग या स्क्रिप्ट बनाती है, और अगर वह ईमानदार है, तो एक अतिरिक्त टेस्ट छोटी क़ीमत है।
दोबारा टेस्ट एक साधारण टाइपिंग टेस्ट है, साधारण टेक्स्ट में, कोई बिगड़ी हुई तस्वीर या अजीब सिंबल वाला पेज नहीं। मुश्किल से पढ़ा जाने वाला टेक्स्ट सबको धीमा करता है, और सबसे ज़्यादा उन्हीं ईमानदार तेज़ टाइपिस्टों को जिन्हें पास करने के लिए दोबारा टेस्ट बना है। ऐसा सत्यापन जिसमें ईमानदार तेज़ टाइपिस्ट फ़ेल हों, न होने से बदतर है। साधारण टेक्स्ट जाँच को निष्पक्ष भी बनाता है: दोबारा टेस्ट का अपना लॉग भी किसी दूसरे नतीजे की तरह उन्हीं टाइमिंग जाँचों से गुज़रता है।
रेट लिमिट और बैन
नतीजे भेजने की दर सीमित है: साइन इन किए हर यूज़र के लिए एक मिनट में तीस, हर IP पते के लिए साठ। जो अकाउंट बार-बार जाँचों में फँसता है, वह शैडो-बैन होता है, यानी चुपचाप बोर्ड से छिपा दिया जाता है, और 24 घंटे में तीन गंभीर एंटी-चीट घटनाएँ इसे अपने आप शुरू कर देती हैं। एक समय-सीमा के अंदर घटनाएँ गिनने का मतलब है कि एक अजीब नतीजे से आपका अकाउंट कभी नहीं जाता, जबकि बार-बार फ़ेल होने वाली स्क्रिप्ट जल्दी रुक जाती है।
सर्वकालिक लीडरबोर्ड के लिए अकाउंट पर 30 मिनट की टाइपिंग भी ज़रूरी है, ताकि एक परफ़ेक्ट रन वाला नया अकाउंट उनमें सबसे ऊपर न पहुँच सके।
अनजाने में फ़्लैग किस वजह से लगता है
फ़्लैग हुए ज़्यादातर नतीजे चीटिंग नहीं होते। ईमानदारी से जाँच में फँसने के तरीक़े:
फ़ोन पर ऑटोकरेक्ट। बदलाव एक input इवेंट के रूप में आता है जो कई अक्षर बदल देता है। हम इसे एक कीप्रेस गिनते हैं, फ़्लैग करते हैं, और नतीजे को एक नोट के साथ पब्लिक बोर्ड से बाहर रखते हैं, ख़ारिज नहीं करते।
पेस्ट किया टेक्स्ट। पेस्ट करना ब्लॉक है, और जिस नतीजे में इसकी कोशिश हुई, वह बोर्ड से बाहर रहता है।
टैब बदलना। टेस्ट के दौरान फ़ोकस दो सेकंड से ज़्यादा पेज से हटे, तो वह बाधित (interrupted) माना जाता है; वह सेव होता है और दिखता है, लेकिन रैंक नहीं होता।
ठहरना। शब्द या कोट वाले टेस्ट में पाँच सेकंड से लंबा अंतर नतीजे को रुका हुआ (paused) मानता है। वही बर्ताव।
IME composition। जापानी, कोरियाई और चीनी इनपुट composition इवेंट से आते हैं, इसलिए उनके लिए हम keydown वाला नियम छोड़ देते हैं। अगर फिर भी कुछ ग़लत दिखे, तो वह बग है, और हम लॉग देखना चाहेंगे।
ऑफ़लाइन नतीजे। जो नतीजा ख़त्म होने के दस मिनट से ज़्यादा बाद सिंक हो, वह बिना रैंक के आपकी हिस्ट्री में रहता है, क्योंकि हम उसकी घड़ी की पुष्टि नहीं कर सकते।
सच में तेज़ होना। 130 WPM से ऊपर आपका सामना दोबारा टेस्ट से होगा, शायद अपने पहले अच्छे दिन पर ही।
अपील कैसे करें
हर बार बाहर रखे जाने की वजह आपकी हिस्ट्री में दिखती है। अगर आपको लगता है कि किसी नतीजे या पाबंदी पर हम ग़लत हैं, तो अपने अकाउंट वाले ईमेल पते से हमारे एंटी-चीट पेज पर दिए अपील पते पर ईमेल करें, नतीजे के लिंक या टेस्ट की तारीख़ और समय के साथ। एक व्यक्ति कीस्ट्रोक रीप्ले देखता है और कुछ दिनों में जवाब देता है। अपील का फ़ैसला कभी भी सिर्फ़ ऑटोमेटेड मॉडल नहीं करता।
क्या हमने अभी-अभी जाँचें पार करने की गाइड छाप दी? कुछ हद तक। ख़ासियतों की सूची बर्ताव से हमेशा पता लगाई जा सकती थी, और सीमाएँ निजी रहती हैं। अहम हिस्सा दोबारा टेस्ट है, और उसे पास करने का तरीक़ा है टाइप करना।
अक्सर पूछे जाने वाले सवाल
टाइपिंग टेस्ट बॉट को कैसे पकड़ते हैं?
अच्छे टेस्ट कीस्ट्रोक लॉग पढ़ते हैं: क्या हर अक्षर के पीछे कुंजी दबी है, कुंजियों के बीच के अंतर कितने बदलते हैं, और कुंजियाँ कैसे दबाए रखी और एक-दूसरे पर चढ़ाई जाती हैं। स्क्रिप्ट बहुत ज़्यादा नियमित होती हैं; सावधान बॉट इंसानों की नक़ल कर सकते हैं, इसीलिए हम दोबारा टेस्ट जोड़ते हैं।
क्या कोई बॉट टाइपिंग टेस्ट का एंटी-चीट पार कर सकता है?
सावधान बॉट टाइमिंग की जाँचें पार कर सकता है: कीस्ट्रोक-टाइमिंग डिटेक्टरों पर रिसर्च में पाया गया कि नक़ली इंसान जैसी टाइमिंग लगभग हर बार उनसे बच निकली। इसीलिए हम तेज़ नतीजों को दोबारा टेस्ट के लिए रोकते हैं, जिसे बॉट को फिर से पास करना होता है, एक दूसरे लॉग के साथ जो उन्हीं जाँचों से गुज़रे।
मेरा टाइपिंग टेस्ट का नतीजा रैंक क्यों नहीं हुआ?
आम तौर पर वजह होती है 15 सेकंड या 10 शब्दों से छोटा टेस्ट, पाँच सेकंड से लंबा ठहराव, टैब बदलना, या 130 WPM से ऊपर का नतीजा जो अपने दोबारा टेस्ट का इंतज़ार कर रहा है। आपकी हिस्ट्री वजह दिखाती है।