同一網址的 QR Code 為何不同?8 種遮罩及懲罰分數原理
EENTERTAINMENT
娛樂發布: 9 分鐘閱讀

同一網址的 QR Code 為何不同?8 種遮罩及懲罰分數原理

同一個網址交給兩款 QR Code 產生工具,黑白圖案未必一樣。單憑外觀不能判斷哪個有錯,應先解碼,再核對內容。遮罩選擇會影響圖案,錯誤修正等級、符號大小及編碼方式亦會。

本文以常見的正方形 QR Code Model 2 為範圍;不能將這 8 種遮罩及評分方法原封不動套用於 Micro QR 或 rMQR。承接QR Code 錯誤修正等級介紹,以下說明遮罩如何改變圖案,以及它不能解決的問題。

日文原文發布: 2026-06-06

圖案不只由原始資料決定

QR Code 包含資料碼字、錯誤修正碼字,以及定位、時序和校正等功能圖案。直接放入位元而不加遮罩,可能出現大塊同色區域、過長的同色排列,或近似定位圖案的形狀。

圖案中的小方格稱為模組(module)。遮罩按指定條件,把資料碼字、錯誤修正碼字及末端剩餘位元(remainder bits)所在區域的部分方格反轉:黑變白,白變黑。條件不同,即使碼字相同,外觀亦會不同;資料容量和錯誤修正的冗餘量並不會因此增加。

同一方格反轉兩次便回復原值。格式資訊記錄了遮罩編號,讀取端可據此解除遮罩,取回碼字。遮罩並非隨機裝飾,也不是加密方法。

8 種遮罩:先訂清座標方向

座標不包括外圍留白。符號左上角的模組為 (r, c) = (0, 0);r 是橫行(row)編號,向下遞增,c 是直欄(column)編號,向右遞增。mod 表示取餘數,floor 表示向下取整。符合條件的適用模組才反轉;功能圖案及格式資訊不會被這 8 種資料遮罩反轉。

如表格未能完整顯示,可左右捲動。

遮罩編號反轉條件
0(r + c) mod 2 = 0
1r mod 2 = 0
2c mod 3 = 0
3(r + c) mod 3 = 0
4(floor(r / 2) + floor(c / 3)) mod 2 = 0
5((r × c) mod 2 + (r × c) mod 3) = 0
6(((r × c) mod 2 + (r × c) mod 3) mod 2) = 0
7(((r + c) mod 2 + (r × c) mod 3) mod 2) = 0

自動選擇會評估全部 8 個候選圖案,取懲罰分數最低的結果。有些程式庫容許手動指定遮罩,須與自動評分的結果分開理解。只要正確套用於同一組碼字,不同遮罩仍然可以解碼出相同內容。

候選格式資訊要在評分前寫入

編碼會先選擇數字、英數字或位元組等模式及版本,建立資料與錯誤修正碼字,再配置功能圖案和碼字。Nayuki 的公開實作隨後按以下次序比較遮罩:

  1. 套用一個候選遮罩。
  2. 寫入該候選遮罩的格式資訊。
  3. 對整個符號評分,包括功能圖案。
  4. 撤銷該次反轉,繼續比較下一個候選。
  5. 套用獲選遮罩,並寫入最終格式資訊。

被反轉的範圍,不等於被評分的範圍。計算黑色比例時,符號外圍留白不計入模組總數。讀取端從格式資訊取得編號,毋須重新比較所有候選分數。

即使網址相同,錯誤修正等級、版本、分段和編碼選擇,亦可能令加遮罩前的排列不同。實作細節也會影響評分。外觀有別,不足以證明其中一個是假碼,或內含不同資料。

N1:連續同色的橫行與直欄

同色連續區段長度 L≥5 時,加 3 + (L − 5) 分。橫行、直欄都要計算,白色區段亦包括在內。5 格是 3 分、6 格是 4 分、7 格是 5 分,並非每 5 格另開一組。

11111   → 3 分
111111  → 4 分
0000000 → 5 分

1 代表黑色,0 代表白色。這些只是局部計分例子,不是整個 QR Code 的總分。

N2:同色 2×2 方塊,包括重疊部分

每個同色 2×2 方塊加 3 分,重疊的方塊也要計算。同色 3×3 正方形包含 4 個 2×2 方塊,單計 N2 就是 12 分。同色 a×b 長方形內有 (a−1)(b−1) 個這類方塊。

N2 與 N1 獨立計分再相加。同一區域符合多項規則,並不是錯誤重複計分。

N3:近似定位圖案的排列

這項規則檢查橫行和直欄中黑、白、黑、白、黑的連續長度比 1:1:3:1:1,同時考慮周邊白色空間。以 1 個模組為基本寬度,例子包括 00001011101 及 10111010000;每次符合條件的偵測加 40 分。不能只見到中間的 1011101,不理周邊情況就計分。

以上短例並非完整 N3 實作。Nayuki 亦處理按比例放大的連續長度,以及符號邊界的白色空間;ZXing 的 MaskUtil 則檢查 7 格核心排列及相鄰 4 格白色模組。周邊、邊界及重疊偵測的處理不同,兩個程式庫未必得出相同分數。

N4:黑色比例與四項規則的總分

在 ZXing 的實作中,D 是黑色模組數,T 是不包括外圍留白的模組總數,計分式為 10 × floor(abs(20D − 10T) / T),abs 表示絕對值。21×21 符號的 T=441:D=220 得 0 分,D=250 得 10 分,D=280 得 20 分。不要先將比例四捨五入至整數百分比才計分。

遮罩選擇看 N1 至 N4 的總和,不是單看黑白比例是否最接近 50%。符號邊長是奇數,因此黑白模組不可能剛好各佔一半。

遮罩不會改變資料量或錯誤修正的冗餘量;白色較多,不代表資料較少或較稀疏。分數是用來比較圖案,並不是在某種印刷、光線或相機條件下實測的掃描成功率。

標誌、留白和印刷問題,不能只靠換遮罩

Model 2 符號四邊均須保留至少 4 個模組寬的留白區(quiet zone)。對比不足、邊緣模糊、印刷尺寸過小,或標誌遮蓋功能圖案,都不能單靠另一種遮罩修復。

錯誤修正等級 H 的約 30%,並不代表可以用標誌遮蓋圖片 30% 的面積。Reed–Solomon 碼處理碼字錯誤,大約可修復的比例不能當作安全遮蓋面積。格式資訊另有錯誤保護,但定位圖案、留白或對比受損,可能令辨識及讀取失敗,未到資料錯誤修正的階段便已無法繼續。

應以多部裝置解碼實際輸出,核對還原的文字。若用於印刷,須在最終尺寸、紙張和光線下測試,不能只看螢幕預覽。當模組小得令相機無法分辨邊界,即使懲罰分數低,亦不能保證讀取成功。

分清實際 QR Code 與遮罩示意圖

本文圖版左方的 QR Code 實際編入 https://nandemo-tools.com/。右方 8 個小格子只是遮罩條件示意,並非可掃描的 QR Code。示意中的黑格表示「這個座標符合反轉條件」,不表示最終圖案該格必定為黑色。將兩者分開標示,才不會把裝飾格子誤當成真實編碼資料。

ISO 目錄把 2015 年版列為已撤銷,後繼版本是 2024 年版。本文依公開文件及實作解說,並非按完整標準進行的符合性審核。計分例子只用來解釋指定規則和實作,不能取代完整編碼規格。技術圖版本身也會傳達規則,應一併驗證,而不是只求外觀像 QR Code。

參考資料及來源

編輯說明

本文使用 AI 協助編輯,並在發布前由編輯核對。內容仍可能包含事實、理解或時效上的錯誤;作出重要決定前,請查閱所列的一手資料或官方文件。

相關文章