QR Code 如何運作:結構、容錯機制與資料容量完整解析
手機讀取 QR Code 時到底發生了什麼事?一篇看懂定位圖案、模組、版本、容錯等級,以及一個 QR Code 能容納多少資料。
發布於 閱讀時間 6 分鐘
QR Code 無所不在——餐廳桌上、包裹、火車票、名片和付款終端機上都看得到。然而,很少人知道這些黑白方格裡藏了什麼,也不明白為什麼 QR Code 被 Logo 遮住一部分後依然能用。本文將以淺顯易懂的方式,說明 QR Code 的運作原理。
簡史
QR Code(Quick Response code,意即「快速回應碼」)由日本豐田集團旗下 Denso Wave 公司的原昌宏(Masahiro Hara)於 1994 年發明。當時汽車工廠需要比一維條碼更快速地追蹤零件。傳統條碼只能在單一方向儲存資料,大約只能容納 20 個字元;QR Code 則能同時在水平與垂直方向儲存資料,可容納數千個字元。
Denso Wave 雖然為這項技術申請了專利,卻選擇不行使專利權,這個格式後來也成為國際標準(ISO/IEC 18004)。正是這份開放性,讓任何人都能在任何裝置上免費產生及讀取 QR Code。
QR Code 的結構
每個 QR Code 都是由稱為模組(module)的小方格所組成的正方形網格。每個模組非深即淺,代表一個位元。網格中有些區域負責固定的任務:
- 定位圖案(finder pattern)——位於三個角落的大方塊。它們讓掃描器能立刻找到 QR Code 並判斷方向,即使 QR Code 上下顛倒或是斜著拍攝也沒問題。
- 校正圖案(alignment pattern)——較小的方塊(版本 2 以上才有),當 QR Code 印在曲面上或以透視角度觀看時,有助於修正變形。
- 時序圖案(timing pattern)——位於定位圖案之間、深淺交錯的線條,用來告訴掃描器每個模組有多大。
- 格式資訊(format information)——定位圖案旁的細長區域,記錄所使用的容錯等級與遮罩圖樣。
- 留白區(quiet zone,又稱靜區)——QR Code 周圍的空白邊界。它是規格的一部分:少了它,掃描器就無法分辨 QR Code 在哪裡結束、背景從哪裡開始。
其餘部分都是資料碼字與錯誤修正碼字,交錯分布於整個網格中。
版本:為什麼有些 QR Code 比較密
QR Code 共有 40 種尺寸,稱為版本(version)。版本 1 為 21 × 21 個模組,每升一個版本,每邊就增加 4 個模組,直到版本 40 的 177 × 177 個模組。編碼的資料越多,版本就越高;在相同的列印尺寸下,每個模組也就越小。
這就是為什麼短網址會產生乾淨、疏朗的圖案,而一長串文字則會產生密密麻麻的圖案,必須印得更大。當你在我們的 QR Code 產生器建立 QR Code 時,預覽會顯示版本與模組數,方便你隨時掌握密度。
編碼模式與容量
QR Code 會為你的內容選擇最有效率的編碼模式:
| 模式 | 字元 | 最大容量(版本 40、L 等級) |
|---|---|---|
| 數字 | 0–9 | 7,089 個數字 |
| 英數字 | 0–9、A–Z、空格及 $%*+-./: |
4,296 個字元 |
| 位元組 | 任何資料,通常為 UTF-8 文字 | 2,953 位元組 |
| 漢字 | 日文字元 | 1,817 個字元 |
這些都是理論上的最大值。實務上,內容在數百個字元以內,QR Code 都還能穩定掃描。如果需要分享更多內容,不如改為編碼一個指向網頁的短連結。
容錯機制:Logo 背後的祕密
QR Code 採用 Reed–Solomon 錯誤修正碼,這正是讓刮傷的 CD 和 DVD 依然能播放的數學原理。編碼時會額外加入碼字,因此即使 QR Code 有部分損毀、髒污或被遮住,仍能重建原始資料。容錯等級共有四種:
- L(低)——可修復約 7% 的受損碼字
- M(中)——約 15%
- Q(中高)——約 25%
- H(高)——約 30%
等級越高,QR Code 越耐用,但也會越大,因為有更多空間要用來存放冗餘資料。這正是 Logo QR Code 得以實現的原因:放在中央的 Logo 會刻意「破壞」部分 QR Code,再由容錯機制補上缺口。若要加入 Logo,請選擇 Q 或 H 等級,並讓 Logo 面積維持在 QR Code 的四分之一左右以下。
提示:容錯機制無法取代良好的對比度。顏色太淺、尺寸太小或缺少留白區的 QR Code,即使使用 H 等級也可能掃不出來。
遮罩:讓圖案保持可讀
原始資料可能會意外形成大片同色區塊,或出現看起來像定位圖案的形狀,讓掃描器混淆。為了避免這種情況,編碼器會套用八種遮罩圖樣之一——也就是翻轉特定模組的數學公式——並保留「懲罰分數」最低的那一種。掃描器會從格式資訊讀取遮罩編號,再將其還原。你完全不必操心遮罩的事,但正因為有它,兩個內容幾乎相同的 QR Code 看起來可能截然不同。
掃描時發生了什麼事
當你將相機對準 QR Code 時,掃描器會:
- 尋找三個定位圖案,計算 QR Code 的位置、大小與旋轉角度。
- 校正透視:利用校正圖案,將傾斜的 QR Code 還原成平面網格。
- 取樣:以時序圖案為尺規,判斷每個模組是深色還是淺色。
- 讀取格式資訊、移除遮罩並蒐集碼字。
- 修復:以 Reed–Solomon 解碼修正錯誤。
- 解讀資料——連結、Wi-Fi 登入資訊或聯絡人名片——並提供對應的操作。
整個過程只需要幾毫秒。你可以用我們的線上 QR Code 掃描器親自試試看,它會直接在你的瀏覽器中,針對上傳的圖片、連結或相機畫面執行上述步驟。
靜態與動態 QR Code
靜態 QR Code 直接包含最終內容:網址、Wi-Fi 密碼或文字本身。它可以永久使用、不需要伺服器,也無法被追蹤。動態 QR Code 則包含由服務供應商所擁有的短轉址連結,讓你日後可以更改目的地並統計掃描次數——但一旦訂閱結束,它就會失效。
在 QR.tools 製作的每個 QR Code 都是靜態的:免費、私密且永久有效。如果日後需要更改目的地,請讓 QR Code 指向一個你能掌控的網頁,之後只要更新該網頁即可。
QR Code 可以包含什麼?
由於 QR Code 單純只是儲存文字,文字的格式就決定了手機會如何處理它。標準化的格式包括:
- 網址——開啟網站(
https://…) - Wi-Fi——連上網路(
WIFI:T:WPA;S:…;P:…;;)——請參考 Wi-Fi QR Code 產生器 - vCard——儲存聯絡人——請參考 vCard QR Code 產生器
- 電子郵件、簡訊與電話——透過
mailto:、SMSTO:和tel:開始撰寫訊息或撥打電話 - 行事曆活動——透過 iCalendar 的
VEVENT新增活動 - 地理位置——透過
geo:座標開啟地圖
重點整理
- QR Code 是由模組組成的網格,資料周圍有固定的定位、時序與校正圖案。
- 內容越多,版本越高、圖案越密,最小列印尺寸也越大。
- 容錯等級(L、M、Q、H)讓 QR Code 即使受損也能讀取——也讓加入 Logo 成為可能。
- 靜態 QR Code 永久有效且保護隱私;動態 QR Code 可以修改,但必須仰賴服務供應商。
準備好動手做一個了嗎?開啟 QR Code 產生器,幾秒內就能做出帶有專屬配色與 Logo 的 QR Code。