इस पेज का कोड चालू नहीं हुआ।

index.html को सीधे किसी फ़ोल्डर से खोलने पर ब्राउज़र JavaScript मॉड्यूल रोक देता है, इसलिए पढ़ी जाने वाली तस्वीर चुनने पर कुछ नहीं होगा। इसके बजाय फ़ोल्डर को http पर सर्व कीजिए:

powershell -ExecutionPolicy Bypass -File serve.ps1

फिर http://localhost:8080/ खोलिए।

QR और बारकोड रीडर — तस्वीर से या कैमरे से QR कोड स्कैन कीजिए

कैमरा कोड पर कीजिए, या उसकी तस्वीर यहाँ छोड़ दीजिए। पढ़ना यहीं होता है, और कहीं नहीं।

भाषा: हिन्दी
कोड देखें
यह टूल तस्वीरें और उनमें मौजूद कोड कभी अपलोड नहीं करता। यहाँ कोई सर्वर है ही नहीं।

कोड पढ़ना पिक्सलों पर की जाने वाली गणित है, और पिक्सल पहले से यहीं हैं। सिंबल ढूँढ़ना, कोण का हिसाब बैठाना, मास्क हटाना, Reed-Solomon से चोट की मरम्मत करना और बिट वापस पढ़ना — यह सब इसी पन्ने के करीब दो हज़ार लाइन JavaScript में होता है, जिसे आप पढ़ सकते हैं। कैमरा वही वादा है, उसका अपवाद नहीं: एक फ़्रेम इसी टैब में पिक्सल बनकर आता है, जाँचा जाता है, और चला जाता है। कुछ रिकॉर्ड नहीं होता, कुछ रखा नहीं जाता, और इस पन्ने में कोई नेटवर्क सुविधा है ही नहीं जिससे कुछ भेजा जा सके।

लाइव जाँच: जाँच जारी…

ऑफ़लाइन: जाँच जारी…

हमारी बात पर भरोसा करने की ज़रूरत नहीं: DevTools खोलिए, Network टैब पर नज़र रखिए, और कैमरा चालू रखकर कोई कोड स्कैन कीजिए। एक भी अनुरोध न कोई फ़्रेम ले जाता है, न उसमें लिखी बात का एक अक्षर। या इंटरनेट काट दीजिए और कोड फिर भी पढ़िए।

1 इसे कोड दिखाइए

फ़ोटो, स्क्रीनशॉट, या कैमरा। जो भी चुनिए, तस्वीर यहीं पढ़ी जाती है, इसी पन्ने में, आपकी अपनी मशीन पर — कुछ अपलोड नहीं होता, और कैमरे का फ़्रेम जाँचकर फेंक दिया जाता है, रिकॉर्ड नहीं किया जाता।

आप तस्वीर सीधे Ctrl+V से भी चिपका सकते हैं — जो कोड पहले से स्क्रीन पर है उसका स्क्रीनशॉट सबसे तेज़ रास्ता है।

2 इसमें क्या लिखा है

दिखाया जाता है, खोला कभी नहीं। छपा हुआ कोड ऐसा पता है जिसे कोई पढ़ नहीं सकता, और ठीक इसी वजह से उस पर स्टिकर चिपकाना किसी के लिए फ़ायदे का सौदा बन जाता है — इसलिए पूरी लिखावट यहाँ देखने को है, और जिस होस्ट पर आप सचमुच पहुँचते वह अपनी अलग लाइन में।

Markdown के रूप में देखें

तस्वीर अपलोड किए बिना QR कोड कैसे पढ़ें

  1. इसे तस्वीर दीजिए। डिब्बे पर कोई फ़ोटो या स्क्रीनशॉट छोड़िए, सीधे कोई तस्वीर चिपकाइए, या कैमरे का बटन दबाइए। एक साथ कई भी ठीक है — हर एक अलग पढ़ी जाती है और हर एक का अपना जवाब आता है। जो कोड पहले से आपकी स्क्रीन पर है उसका स्क्रीनशॉट सबसे तेज़ और सबसे भरोसेमंद रास्ता है, क्योंकि उसमें न लेंस है, न कोण, न रोशनी।
  2. पूरा सिंबल फ़्रेम में आए, हाशिये समेत। कोड के चारों ओर की सफ़ेद जगह कोड का हिस्सा है: उसी से रीडर जानता है कि सिंबल कहाँ खत्म होता है। चौकोरों के किनारे तक कटी हुई फ़ोटो अब तक की सबसे आम वजह है कि कोई कोड नहीं पढ़ा जाता। फ़्रेम का करीब आधा हिस्सा कोड से भर जाए, यह लगभग सही है; इससे पास जाने पर कोने तस्वीर से बाहर चले जाते हैं।
  3. कुछ भी तय करने से पहले पता पढ़िए। पोस्टर, पार्किंग मशीन या चिट्ठी पर लगे कोड को स्कैन करने का मतलब ही यह जानना है कि वह कहाँ ले जाता है, और फ़ोन का कैमरा ठीक यही एक काम आपको सच में करने नहीं देता। यहाँ होस्ट अपनी अलग लाइन में लिखा होता है। अगर वह नाम वैसा नहीं जैसी आपने उम्मीद की थी, तो जिस काम से आप आए थे वह हो चुका और खोलने को कुछ बचा ही नहीं।
  4. चेतावनियों को गंभीरता से लीजिए, खासकर दबी हुई वालों को। सादा http:// पता, ऐसी लिपि में लिखा नाम जो दिखती कुछ और है, कोई लिंक छोटा करने वाली सेवा, या पते में @ से पहले कुछ भी — हर एक वहीं बताया जाता है जहाँ मिलता है। अकेले इनमें से कोई कुछ साबित नहीं करता। वहाँ जाने से पहले सब दस सेकंड के लायक हैं।
  5. अगर न पढ़े, तो सबसे पहले रोशनी बदलिए। लगभग हर नाकामी थ्रेशोल्ड की दिक्कत होती है: बीच में पड़ती चमक, किसी कोने पर छाया, या ऐसे कोण से खींची गई स्क्रीन जिसमें बैकलाइट आ जाती है। ऐसे खड़े होइए कि चमक कोड पर न पड़े, या कैमरे की बत्ती जला लीजिए। फिर भी न हो तो एक सपाट, सामने से ली गई फ़ोटो खींचकर वही छोड़िए — ठहरी हुई तस्वीर की तलाश उससे कहीं ज़्यादा गहराई से होती है जितनी लाइव फ़्रेम की हो सकती है।
  6. जवाब अटपटा लगे तो सैंपल की गई तस्वीर देखिए। “यह कैसे पढ़ा गया” खोलिए और छोटी जाली देखिए। यह वही है जो इस पन्ने ने कोड समझा, सैंपल किए गए मॉड्यूलों से दोबारा बनाया हुआ। जिस रीडर ने सिंबल गलत पढ़ा और उसे मरम्मत करके कुछ भरोसेमंद-सा बना दिया, वह इसे वहीं दिखाएगा, और कहीं नहीं।

विस्तार से

QR कोड कैसे बनाएँ और कैसे साबित करें कि वह पढ़ा जाता है कोड बनाइए, फिर उसी साइट के रीडर से जाँचिए: हू-ब-हू सामग्री, असली लिंक, छपाई के आकार में और एक तस्वीर से, छपाई से पहले। सब ब्राउज़र में, कुछ भी अपलोड नहीं।

सवाल

क्या तस्वीर कहीं अपलोड होती है?

नहीं, और उसमें से पढ़ी गई कोई चीज़ भी नहीं। तस्वीर इसी पन्ने के एक कैनवस पर डिकोड होकर वहीं पढ़ी जाती है, इसी साइट से आए JavaScript के ज़रिए। इस टूल में कोई नेटवर्क सुविधा है ही नहीं — यह कभी कुछ मँगाता नहीं और कभी कुछ भेजता नहीं — और पन्ने की Content-Security-Policy में हर वह पता लिखा है जिससे यह संपर्क कर सकता है, और उनमें से कोई हमारा नहीं। सबसे सरल सबूत: इंटरनेट काट दीजिए, यह चलता रहता है।

क्या कैमरा कुछ रिकॉर्ड करता है?

नहीं। कैमरे का फ़्रेम इसी टैब में पिक्सल बनकर आता है, एक कैनवस पर बनता है, जाँचा जाता है, और करीब दसवें हिस्से भर सेकंड बाद अगले फ़्रेम से मिट जाता है। डिस्क पर कुछ लिखा नहीं जाता और कुछ रखा नहीं जाता। जैसे ही आप रोकते हैं स्ट्रीम बंद हो जाती है, टैब पीछे जाने पर भी, और पन्ना छोड़ने पर भी — और भरोसे लायक संकेत आपके कैमरे की बत्ती है, क्योंकि उसे कोई पन्ना बुझा नहीं सकता।

यह लिंक खोलने के बजाय मुझे दिखाता क्यों है?

क्योंकि काम की चीज़ यही है। QR कोड ऐसा पता है जिसे आप पढ़ नहीं सकते, और इसीलिए पार्किंग मशीन के कोड पर चिपका स्टिकर काम कर जाता है: जब तक आपको पता चलता है कि वह कहाँ ले गया, आप वहाँ पहुँच चुके होते हैं। यहाँ पूरी लिखावट छपती है, होस्ट अपनी अलग लाइन में निकाला जाता है, और खोलना एक अलग बटन है जिसे आप पढ़ने के बाद दबाते हैं। यह एक क्लिक ज़्यादा है, और यही वह क्लिक है जिसकी इस फ़ॉर्मैट को हमेशा से ज़रूरत थी।

यह क्या-क्या पढ़ सकता है?

QR कोड, 1 से 40 तक हर वर्शन में, चारों त्रुटि-सुधार स्तरों पर, न्यूमेरिक, अल्फ़ान्यूमेरिक, बाइट और कांजी मोड में, जिसमें ECI कैरेक्टर सेट और जुड़े हुए सेट के सिंबल चुपचाप गिराए जाने के बजाय बताए जाते हैं। धारीदार तरफ़: EAN-13, EAN-8, UPC-A, UPC-E, ITF-14, Interleaved 2 of 5, Code 128 और Code 39। Data Matrix, PDF417, Aztec और MaxiCode यह नहीं पढ़ता।

मेरा कोड नहीं पढ़ा जा रहा। क्या गड़बड़ है?

दस में नौ बार तीन में से कोई एक बात। सफ़ेद हाशिया कट गया है, और रीडर उसी से जानता है कि सिंबल कहाँ खत्म होता है। कोड के किसी हिस्से पर चमक या छाया पड़ रही है, इसलिए कोई थ्रेशोल्ड गहरे चौकोरों को हल्कों से अलग नहीं कर पाता। या कोड फ़्रेम में इतना छोटा है कि उसके मॉड्यूल एक-दो पिक्सल से ज़्यादा के नहीं। रोशनी बदलिए, फ़्रेम का करीब आधा हिस्सा भरिए, और तिरछे के बजाय सामने से फ़ोटो लीजिए।

क्या यह टूटा हुआ या आंशिक रूप से ढका कोड पढ़ सकता है?

अक्सर हाँ, और यह फ़ॉर्मैट का अपने डिज़ाइन के मुताबिक काम करना है, यहाँ की कोई होशियारी नहीं। हर QR कोड Reed-Solomon जाँच-डेटा साथ रखता है, और H स्तर पर बना सिंबल अपने करीब 30% मॉड्यूल खोकर भी हूबहू दोबारा बन जाता है। पन्ना “यह कैसे पढ़ा गया” के नीचे बताता है कि उसे कितने कोडवर्ड सुधारने पड़े, जिससे आप देख सकें कि मामला कितना करीब था। जो यह नहीं करता, वह है अंदाज़ा: जाँच जितना संभाल सकती है उससे ज़्यादा टूटे सिंबल को यह गलत जवाब देने के बजाय अपठनीय बताता है।

यह क्यों कहता है कि bit.ly लिंक कहाँ जाता है, यह नहीं बता सकता?

क्योंकि यह पता करने का मतलब है bit.ly से पूछना, और वह एक नेटवर्क अनुरोध है। इस पन्ने का बाकी हर दावा इसी पर टिका है कि यहाँ ऐसा कोई कोड नहीं जो किसी से संपर्क करे, और चुपचाप एक अपवाद बना लेना उस जवाब से कम कीमती होता। तो लिंक छोटा करने वाली सेवा का नाम बता दिया जाता है और वह जो छिपाती है उसे ईमानदारी से अनजाना छोड़ दिया जाता है। सुलझाना ही है तो उसे किसी ऐसी जगह चिपकाइए जो पूछने को तैयार हो।

क्या QR कोड स्कैन करना सुरक्षित है?

स्कैन करना सुरक्षित है। उस पर अमल करना जोखिम है, और वह असली जोखिम है: पार्किंग मशीनों पर, रेस्तराँ की मेज़ों पर और कूरियर की पर्चियों पर असली कोड के ऊपर चिपकाए गए कोड अब इतने आम हो चुके हैं कि उनका नाम पड़ गया है। वे इसलिए चलते हैं कि कोड को देखकर कोई पढ़ नहीं सकता। उसे खोले बिना पढ़ लेना — जो यह पन्ना करता है — वह पूरी बढ़त छीन लेता है, और होस्ट देखने में लगने वाले दस सेकंड ही सारा बचाव हैं।

हर नतीजे के नीचे वह छोटी जाली क्या है?

वे मॉड्यूल जो इस पन्ने ने सचमुच आपकी तस्वीर से सैंपल किए, प्रति मॉड्यूल एक चौकोर के हिसाब से दोबारा बनाए हुए। वह इसलिए है कि पढ़ाई पर भरोसा करने के बजाय उसे आँख से जाँचा जा सके: अगर वह जाली उसी कोड जैसी दिखती है जो आपने खींचा था, तो ऊपर का जवाब सही पिक्सलों से आया है। शायद ही कोई रीडर आपको यह दिखाता है, और यही उस टूल में फ़र्क है जिसे आप जाँच सकते हैं और उसमें जिस पर आपको भरोसा करना पड़ता है।

क्या यह एक ही तस्वीर में कई कोड पढ़ता है?

फ़िलहाल एक तस्वीर में एक। एक साथ कई तस्वीरें छोड़िए तो हर एक अलग पढ़ी जाती है, और कैमरा हिलाते-हिलाते एक के बाद एक कोड पढ़ता जाता है, हर नया कोड रखता जाता है जो उसने पहले न देखा हो। कोडों से भरे पूरे पन्ने की एक ही फ़ोटो के लिए या तो काट-छाँट चाहिए, या कैमरा एक-एक करके उन पर करना होगा।

मेरा बारकोड जो मैंने माँगा था उससे अलग नाम से क्यों बताया गया?

क्योंकि बारकोड अपना नाम साथ लेकर नहीं चलता। UPC-A दरअसल वही EAN-13 है जिसका पहला अंक शून्य हो, ITF-14 चौदह अंकों और वैध चेक अंक वाला Interleaved 2 of 5 है, और Code 128 अपने अंक-मोड में किसी और जैसा दिखता ही नहीं। यह पन्ना वही बताता है जो धारियाँ कहती हैं, और साथ में वह जो चेक अंक पक्का करता है — उतना ही, जितना खुद सिंबल जानता है।

क्या यह ऑफ़लाइन चलता है?

हाँ। पन्ना एक बार लोड कीजिए, फिर इंटरनेट काट दीजिए और यह चलता रहता है, कैमरे समेत। यह साबित करने का सबसे सरल तरीका भी यही है कि कुछ अपलोड नहीं होता: जो रीडर आपकी तस्वीर डिकोड कराने बाहर भेजता, वह उसी पल रुक जाता जिस पल आप प्लग निकालते।