
內容摘要
做出穩定可掃的 QR Code:容錯等級、payload 格式、印刷尺寸、Logo 疊圖,以及掃不到時的排查清單。
這篇 QR Code 教學要解的,是那些在真實世界裡掃不到、或掃得慢的碼:對比不足、留白區被裁掉、Logo 蓋掉太多模組,或印刷尺寸相對掃描距離太小。下面說明 QR Code 的結構、容錯怎麼運作,以及讓它在屏幕與紙本上都能穩定掃到的設定。
所有內容都在你的瀏覽器裡產生,所以你編進去的網址、Wi-Fi 密碼或聯絡資料都不會被上傳。
01QR Code 裡面有什麼
QR Code 是方形畫布上一格一格的深色與淺色模組。三個大型定位圖案位於角落,讓相機能找到並判斷方向;較小的校正圖案則在表面彎曲或影像歪斜時維持網格可讀。
payload 會連同版本(尺寸,從 21×21 模組起跳)、容錯等級與遮罩樣式一起儲存。掃描器解出模組、還原遮罩,再檢查 Reed-Solomon 容錯碼字。只要損傷在所選容許範圍內,資料就能被完整還原——這就是中間放了 Logo、或一角有磨損仍能掃到的原因。
網格周圍的空白邊界就是留白區。Denso Wave 規定四周要留四個模組寬的邊界;相機靠它把 QR Code 與背景分開,所以把標籤裁到貼邊的 QR Code,即使每個模組都正確也常常掃不到。
02產生 QR Code
- 選擇內容類型 — 網址、純文字、Wi-Fi、vCard 聯絡人、Email 或電話。類型決定 payload 怎麼編碼,以及手機掃到之後會提供什麼動作。
- 輸入 payload — 網址要包含 scheme(https://)。Wi-Fi 請填 SSID、密碼與加密方式。預覽會跟著每次按鍵重繪,字元計數器則顯示你用掉多少版本容量。
- 調整幾何與顏色 — 選擇點形與角落定位圖案的樣式,再設定前景與背景色。請維持深色模組配淺色底、對比要強;不要把顏色反過來,因為多數掃描器預期的是深底淺。
- 設定容錯並加上 Logo — 容錯越高越能承受損傷,但容量會變少,可能把 QR Code 推向更大、更密的版本。如果要疊置中 Logo,請控制在大約 20–25% 面積內,並調高容錯等級來補償。
- 依媒介決定尺寸並匯出 — 依最終媒介設定匯出尺寸、保留留白區,屏幕用 PNG、印刷與無損縮放用 SVG。如果 PNG 對網頁來說太重,先交給 圖片壓縮工具 處理。
03容錯等級
四個等級與可還原的損傷比例來自 QR Code 標準,Denso Wave 也指出 M(約 15%)是最常被選用的等級。
| 等級 | 可還原的損傷 | 相對容量 | 適用 |
|---|---|---|---|
| L(低) | 約 7% | 最高 | 乾淨的數碼屏幕、極小的碼 |
| M(中) | 約 15% | 高 | 一般網頁與印刷 |
| Q(四分位) | 約 25% | 中 | 有小 Logo 的印刷品、工業標籤 |
| H(高) | 約 30% | 最低 | 大面積 Logo,或容易受損的表面 |
04穩定可用的 payload 格式
QR Code 就只是一段文字;手機作業系統會依 payload 格式決定要做什麼。下面的 Wi-Fi 與 vCard 寫法採用 ZXing 專案整理的 payload 格式。一段你讀不懂的內容,例如權杖或編碼過的字串,可以用 Base64 編碼 / 解碼還原。以下是值得記住的幾種:
- 網址 —
https://example.com/:務必帶 scheme,少了它有些掃描器會把內容當成純文字。 - Wi-Fi — WIFI:T:WPA;S:NetworkName;P:password;H:false;;,其中 T 是 WPA、WEP 或 nopass。值裡的 ;、,、: 與 \ 要用反斜線跳脫。
- 電話 — tel:+886912345678。用國際格式,從任何國家都能撥。
- Email —
mailto:name@example.com?subject=Hello&body=Message,值要 URL 編碼。 - 簡訊 — smsto:+886912345678:訊息內容。
- vCard — 標準的 BEGIN:VCARD … END:VCARD 區塊。3.0 版支援度最廣。
- 純文字 — 其它內容;手機會顯示文字並提供複製或搜尋。
payload 越長,QR Code 就會被推向更大、更密的版本,所以很長的網址請縮短,或先把 JSON 壓縮 再編碼。
05印刷與屏幕的尺寸
沒有單一的正確尺寸:它取決於版本、印刷解像度,以及實際掃描距離。Denso Wave 的計算範例示範了做法。50 個字元的 payload 用等級 M,需要 29 模組見方的版本 3;以 400 dpi、每個模組 4 點印刷,單一模組為 0.254 mm,符號就是 29 × 0.254 mm = 7.366 mm;兩側各留四個模組的留白區後,整體約 9.398 mm 見方。
| 媒介 | 要留意的事 |
|---|---|
| 名片 | 縮短 payload,讓版本維持低、模組維持大 |
| 傳單或海報 | 依觀看距離決定尺寸,並保留完整留白區 |
| 桌牌或菜單 | 用啞面、高對比的紙材,避免反光表面 |
| 戶外指標 | 隨距離放大符號,並保留四模組邊界 |
| 網站或 Email | 以實際顯示尺寸輸出圖片;不要讓 CSS 模糊或拉伸 |
如果空間放不下,Denso Wave 給了三個方向:降低版本、把模組印小一點,或把符號拆成幾個碼。
不要反轉顏色
掃描器預期的是淺底深色模組。深底淺色的 QR Code 在你屏幕上看起來沒問題,但很多裝置會掃不到。
06為什麼你的 QR Code 掃不到
如果一個碼在自己屏幕上沒問題,別人卻掃不到,請依序檢查(Denso Wave 的讀取失敗案例涵蓋模組變形、缺少邊界與疊圖):
- 對比 — 深底淺模組會把訊號反過來。改回淺底深模組。
- 留白區 — 空白邊界被裁掉了。重新產生並保留至少四個模組的空間。
- 尺寸 — 相對掃描距離太小,或是由低解像度 PNG 放大而變模糊。
- Logo — 疊圖蓋掉超過約四分之一,或容錯等級太低。
- 損傷 — 摺痕、反光或貼紙蓋住定位圖案;等級 H 能承受更多,但三個角必須完整。
- payload — 過長的網址會把碼推向很密的版本。縮短連結或減少資料。
- 格式 — Wi-Fi payload 少了分號或漏了跳脫字元,就會被當成純文字解讀。
07靜態還是動態 QR Code
靜態碼——也就是這個工具產生的——把資料存在圖裡。它離線可用、永不過期、也無法修改:目的地換了就得重印。
動態碼編的是一段很短的轉址網址,目的地留在伺服器上。這讓碼可以事後修改、也能做掃描分析,代價是多了一個依賴。如果轉址服務終止或訂閱到期,碼就失效了。需要長期保存的印刷品,靜態是比較安全的選擇。
08資料來源
- Error correction feature — https://www.qrcode.com/en/about/error_correction.html (查閱日期:2026-10-09)
- Information capacity and versions of QR Code — https://www.qrcode.com/en/about/version.html (查閱日期:2026-10-09)
- Point for determining the code area — https://www.qrcode.com/en/howto/code.html (查閱日期:2026-10-09)
- Examples of problems encountered in reading a code — https://www.qrcode.com/en/howto/trouble.html (查閱日期:2026-10-09)
- Barcode Contents — https://github.com/zxing/zxing/wiki/Barcode-Contents (查閱日期:2026-10-09)
自訂顏色與點形、置中 Logo,匯出無浮水印的 SVG / PNG。
QR Code 產生器常見問題
QR Code 會過期嗎?
靜態 QR Code 永遠不會過期——資料就在圖裡。動態碼依賴轉址服務,服務終止就失效。
容錯等級該選哪一個?
一般用途選 M;中間要放 Logo、或會印在容易磨損的地方,選 Q 或 H。等級越高,可用容量越少。
為什麼我的 QR Code 掃不到?
常見原因是對比不足、少了留白區、圖太小不符掃描距離,以及 Logo 或破損蓋住定位圖案。
可以印在深色底上嗎?
只有淺色模組配深色底、而且掃描器支援反相時才可行,但多數掃描器不支援。請維持深色模組配淺色底。
我的 Wi-Fi 密碼會被存到哪裡嗎?
不會。payload 是在你的瀏覽器裡編碼進圖片的,沒有任何內容被上傳。
該匯出 PNG 還是 SVG?
印刷、以及任何不能被模糊放大的情境用 SVG;輸出端期待點陣圖、或你需要固定像素尺寸時用 PNG。
印刷的 QR Code 最小可以多小?
沒有固定下限。從印刷解像度回推可讀的模組尺寸,保留四個模組的留白區,再用實際距離測試印出來的碼。
相關文章
- 在不犧牲畫質的前提下壓縮圖片
匯出的素材要輕,又不能被壓壞。
- 用 Diff 比對工具比較兩段文字
檢查兩個版本之間改了什麼。
相關工具
- QR Code 產生器
網址、Wi-Fi、vCard、Email 與電話。
- Base64 編碼 / 解碼
檢查被編碼的 payload 與權杖。
- JSON 格式化工具
處理 QR Code 背後的資料。
- 圖片壓縮工具
把匯出素材縮小再上線。