一張受損票券的修補預算
污點沒有抹掉路徑:一張碼如何替自己留住答案
你拿著一張被折過、邊緣沾到水痕的活動票券,手機卻還是打開了原本的入場網址。那不是手機把模糊圖案猜對了,而是這張碼在被印出來以前,就留了一部分空間給日後的缺口。
直接答案:碼格裡預先留了可修補資訊,也保留定位用的參考;但可修多少在製作時就要用可存資料量交換,而且不是任何損傷都能救回來。
往下讀,看見可修補與不可修補之間的界線
01/找到座標
找到方向,不等於讀完內容
QR Code 的黑白方格看起來像一張平均鋪開的棋盤,但每一格並不做同一件事。DENSO WAVE 的技術說明指出,三個角落的大型定位圖樣能幫助讀取器辨認方向,因此掃描不必把碼端正擺在鏡頭前。
這也解釋了受損時的第一個差別。若讀取器仍能建立方格的方向與尺度,它才有機會辨認哪些位置是內容、哪些位置是用來校正或修補的資訊。相機不是把一團墨點當成照片放大,而是在嘗試回到一個已經定義好的格子座標。
所以,同樣是一道水痕,落在不同地方的後果不一定相同。看起來不大的折痕,如果破壞了關鍵的定位線索,未必比一塊較大的邊緣污點容易處理。這不是讀取器特別挑剔,而是它必須先知道自己正在看哪一格。
02/先留下空位
先留下可修補的空位
當方向已經建立,第二個問題才出現:有些內容看不清,能不能補回來?答案不是把每一個資料格重複印好幾遍。QR Code 在編碼時會放入錯誤修正資訊;DENSO WAVE 也明確說明,部分遭污損或缺失的碼可以藉此恢復資料。
這份能力有一個很實際的價格。用來修補的資訊越多,同樣大小的方格能留給原始網址、文字或其他資料的空間就越少。DENSO WAVE 的容量表可看到,在相同版本下,錯誤修正等級從 L 往 H 提高時,可容納的資料量會下降。換句話說,耐損不是額外附贈的功能,而是把一部分可寫內容換成日後可動用的預算。
這個交換很像出門前在行李箱留一點空位。空位當下看起來沒有帶來更多東西,卻能在臨時需要裝進一件雨衣時,讓整趟行程不必重來。不同的是,QR Code 的空位不是印出後才臨時整理;它在產生碼的那一刻,就已經被編排進方格裡。
深墨資料格
同一張碼想放更多網址、文字或其他內容,就需要更多位置留給原始資料。
琥珀修補格
想承擔更多污損,就必須在一開始把更多位置留給錯誤修正。
03/切換預算
四種修補預算
常見 QR Code 可選 L、M、Q、H 四個錯誤修正等級。請切換按鈕:深墨色代表可留給原始資料的格子,琥珀色代表先留給修補的格子。這是本文的抽象圖解,不是可掃描符號。
停用 JavaScript 時,請以 L 作為靜態例子:官方資料列為約 7% 的 codeword 修復能力。四個等級與容量取捨已在正文完整說明。
深墨資料格較多,琥珀修補格較少;此狀態適合看見「容量優先」的取捨。
L:可動用的修補預算最少;若污損超出範圍,讀取仍可能失敗。
04/不是護身符
百分比不是護身符
最容易被誤讀的是那個百分比。它描述的是錯誤修正的近似可恢復範圍,不是說你可以隨意遮住任意 30% 的畫面,剩下的都會像魔術一樣完整回來。DENSO WAVE 也提醒,是否能恢復仍取決於污損或損壞的程度。
這個限制改變了我們看待「耐損」的方式。它不是要求讀取器什麼都猜中,而是在已知格子結構中,對有限的未知部分做一致的還原。污點太大、太集中,或剛好壓到讀取必需的結構時,預先留下的修補預算就可能不夠用。
因此,手機掃不到時,先別急著只把螢幕拉近或狂擦鏡頭。可以先檢查碼本身是否太小、對比不足、被反光切開,或已經有明顯的折痕與缺角。若有原始網址或原始檔,重新產生一張尺寸更足、邊緣更乾淨、並符合使用環境的碼,往往比期待掃描器從嚴重破損中猜回全部內容更可靠。
05/把餘裕印進去
世界會弄髒它,所以先替答案留一點位置
回到那張受損票券:它仍能掃出網址,不是因為污點不存在,而是因為某些方格的缺失還在一開始預留的修補範圍內。它失效時,也不是系統忽然變笨,而是定位或修補所需的線索已經超出了能承擔的損失。
一張碼真正帶走的,不只是網址。它還把一個很樸素的設計判斷印在小格裡:想讓訊息穿過折痕、水漬、反覆使用與不完美的鏡頭,就要在一開始承認世界會弄髒它,並先為那件事留下一點位置。