跳至主要內容
指南

QR Code 容錯等級詳解(L、M、Q、H):到底該用哪一級?

· 11 分鐘閱讀

打開任何一個 QR Code 產生器,你都會看到標著 L、M、Q、H 的四個選項。大多數人直接用預設值完事——直到印出來的 QR Code 掃不出來,或者行銷部門在中間放了個 Logo 導致整個碼報廢。容錯等級並不是一個裝飾性設定。它決定了 QR Code 能承受多大的物理損壞,並且與 QR Code 能容納多少資料直接此消彼長。

本文將解釋這些等級在 QR Code 規範(ISO/IEC 18004)內部到底做了什麼,用真實數字說明它們如何改變容量,以及如何為你的使用情境選擇正確的等級。

容錯到底是什麼

QR Code 不只是編碼你的資料——它還會編碼冗餘資訊,讓讀取器能夠重建損壞或無法讀取的部分。其機制是 Reed–Solomon 錯誤更正碼,與 CD、DVD、藍光光碟和深太空通訊使用的是同一類演算法。

產生 QR Code 時,資料負載會被拆分成若干區塊,編碼器為每一區塊計算一組錯誤更正碼字(codeword)。如果讀取器隨後發現某些模組(黑白小方塊)無法讀取——因為刮痕、咖啡漬、光線不好或者疊加的 Logo——它就會利用這些冗餘碼字,透過數學方法重建缺失的碼字。

Reed–Solomon 碼有一個有用的性質:要更正 t 個位置未知的錯誤碼字,需要 2t 個冗餘碼字。(如果已知損壞碼字的位置——稱為「抹除」(erasures)——則每個冗餘碼字可以修復一個。)容錯等級本質上就是控制總碼字預算中有多少分配給冗餘、多少分配給負載。

四個等級的數字

ISO/IEC 18004 規範定義了四個容錯等級,其大致復原能力如下——即碼字損壞後仍能完全復原的比例:

等級名稱復原能力
LLow(低)約 7% 的碼字
MMedium(中)約 15% 的碼字
QQuartile(四分之一)約 25% 的碼字
HHigh(高)約 30% 的碼字

這個單一百分比隱藏了兩個重要的細節:

  1. 百分比針對的是碼字,而不是模組面積。 流行的經驗法則「H 級可以承受 30% 的碼面被覆蓋」在實務上大致成立,因為損壞通常是連續的,但正式限制針對的是損壞的碼字。空間上聚集的損壞(例如 Logo)往往比隨機散布的同等數量錯誤更容易復原,因為抹除比位置未知的錯誤更容易更正。
  2. 更高的等級會犧牲容量。 冗餘越多,相同版本(尺寸)下留給負載的空間就越少。如果資料放不下,編碼器就必須跳到更大的版本——模組更多、印刷更密、遠距離更難掃描。

容量:各等級實際讓你付出的代價

QR Code 有 40 種尺寸,稱為版本。版本 1 是 21×21 個模組,之後每個版本每邊增加 4 個模組,直到版本 40 的 177×177。下表列出規範中三種代表性負載類型在四個等級下的最大字元容量。(位元組模式涵蓋任意 UTF-8 類二進位資料和典型 URL;英數模式涵蓋 0–9 A–Z 空格 $%*+-./:;數字模式僅限數字。)

版本模組等級數字英數位元組
121×21L412517
121×21M342014
121×21Q271611
121×21H17107
537×37L255154106
537×37M20212284
537×37Q1448760
537×37H1066444
1057×57L652395271
1057×57M513311213
1057×57Q364221151
1057×57H288174119
2097×97L20611249858
2097×97M1600970666
2097×97Q1120679466
2097×97H861521358
40177×177L708942962953
40177×177M559633912331
40177×177Q399324201663
40177×177H305718521273

仔細看版本 1:從 L 升到 H,位元組容量從 17 降到 7——減少了 59%。對印刷品來說這筆交換通常值得,但代價是真實存在的。一個長 URL 在 M 級可以舒服地放進版本 4 的碼,到了 H 級可能就得用版本 6,而更大的碼意味著同樣的印刷尺寸下模組更小。

更短的負載永遠勝過更強的容錯。 一個短 URL 用低版本、H 級的碼,幾乎總是比一個長 URL 用高版本、L 級的碼更容易掃。如果你編碼的是 URL,就用短網域或轉址連結。這一點比任何其他最佳化都重要。

印刷尺寸與掃描距離:10:1 法則

容錯救不了一個小到根本無法解析的碼。廣泛使用的現場經驗是 10:1 比例:掃描距離不應超過碼寬的 10 倍左右。有些資料認為 10:1 偏保守,並引用了在良好相機和光線下接近 15:1 的成功案例,但設計時應該以 10:1 為準。

  • 名片上的碼,寬 2 cm → 可靠掃描距離約 20 cm 以內
  • 海報上的碼,寬 10 cm → 可靠掃描距離約 1 m 以內
  • 廣告看板上的碼,寬 1 m → 可靠掃描距離約 10 m 以內

兩個相關的限制:

  1. 模組尺寸。 每個模組至少應約為 0.4 mm(2 mil 實在太小了;0.4 mm 是常見的印刷下限),這樣手機相機才能解析。對於版本 10 的碼(57 個模組),僅資料區的最小實體尺寸就約為 2.3 cm。
  2. 靜區(quiet zone)。 規範要求碼四周留出至少 4 個模組寬度的空白邊距。裁掉靜區是印刷碼失敗最常見的原因之一,任何容錯等級都無法彌補——讀取器要靠靜區來找到碼的邊緣。

為什麼放 Logo 必須用 H 級

在 QR Code 中央嵌入 Logo,正是 H 級存在的經典理由。Logo 物理上覆蓋了模組,摧毀了下方的碼字。H 級約 30% 的復原預算才讓這種做法得以存活。

Logo 疊加的實用規則:

  • 用 H 級。 永遠如此。在 M 級(約 15%),一個大小適中的 Logo 就已經吃掉了大部分預算。
  • Logo 面積控制在整個碼面的約 30% 以內——最好明顯低於這個值,因為被覆蓋的區域很少會乾淨地分布在各個碼字區塊上。H 級下覆蓋 20% 面積是穩妥的設計;28% 就是在賭博了。
  • 保持在中央。 三個定位圖案(角落的大方塊)以及校正/對齊圖案承載的結構資料,容錯機制並不能以同樣的方式保護。中央放置可以避開它們。
  • 在真實手機、真實距離、糟糕光線下測試。 不只是拿你的旗艦機放在桌上測。相機平庸的舊款 Android 裝置才是你要設計的下限。

注意,那些讓你不選等級就直接放 Logo 的產生器,實際上是在賭你在別處選的等級。如果你設了 L 又加了 Logo,你就造出了一個經常失敗但又不總是失敗的碼——這是最糟糕的結果,因為它能通過隨手測試,卻在實際使用中翻車。

到底該怎麼選

L 級(約 7%)——僅限數位情境、圖像渲染完美無缺的情況:App 間傳遞、螢幕顯示、手機上展示產生的票券。像素乾淨意味著幾乎不會出錯,所以把預算花在容量和小尺寸上。其他情境很少適合用它。

M 級(約 15%)——乾淨印刷品的通用預設值:名片、產品包裝、文件。能承受正常的使用磨損、輕微印刷瑕疵和反光。大多數產生器預設選它,是有道理的。

Q 級(約 25%)——不放 Logo 的惡劣物理環境:工業標籤、倉庫貨架、設備銘牌、經受風吹日曬的戶外標牌。如果表面在正常使用中會被刮花、弄髒或部分遮蔽,Q 就是主力選擇。

H 級(約 30%)——Logo 疊加、非常惡劣的環境,或者掃描失敗代價高昂的場合(支付碼、安全關鍵標籤)。當你必須印得很小、且預期相機品質較差時,也應選它。

決策樹可以壓縮為:純數位 → L 或 M;乾淨印刷 → M;惡劣環境 → Q;Logo 或關鍵可靠性 → H。 無論選哪個等級:保持負載短、保留靜區、遵守 10:1 距離法則。

自己動手驗證

理論說完了,QR Code 容錯其實很容易實證測試。用我們的 QR Code 產生器 把同一個 URL 按各等級產生一遍,比較一下:

  1. 分別用 L、M、Q、H 級產生碼。注意模組密度的增加——那種視覺上的密度就是冗餘。
  2. 列印 H 級的版本,用硬幣或貼紙蓋住中央(約 20% 面積),然後掃描。它應該還能掃出來。
  3. 對 L 級的版本做同樣的操作。掃不出來。
  4. 拿 H 級的碼逐步覆蓋更多面積,直到掃描失敗——你會發現實際上限接近理論值約 30%。

你還能直接看到容量代價:貼上一個長 URL,觀察每個等級各需要哪個版本(尺寸)。這個實驗比任何表格都能更快地教會你這層取捨。

總結

  • QR Code 的容錯是 Reed–Solomon 冗餘;等級決定碼字預算中冗餘的佔比:L ≈ 7%、M ≈ 15%、Q ≈ 25%、H ≈ 30% 的復原能力。
  • 更高的等級削減容量——在版本 1,H 能容納的位元組不到 L 的一半。
  • 更短的負載勝過更強的容錯;提高等級之前先縮短 URL。
  • 按 10:1 距離法則設計印刷尺寸,永遠不要裁掉 4 個模組寬度的靜區。
  • Logo 疊加 ⇒ H 級,Logo 面積控制在約 30% 以內,居中放置,在便宜手機上實測。

QR Code 產生器 產生幾個變體,五分鐘內你就能明顯看出哪個等級適合你的情境。