TWQR 格式解析

TWQR 是一個還不錯的設計,但沒有得到足夠的聲量

我覺得 TWQR 是一個還不錯的設計,但沒有得到足夠的聲量;它提供可以被不同支付系統及行動銀行同時識別的 QR code、掃描後自動帶入資訊、迅速完成付款或轉帳。

將 TWQR 格式作為跨行轉帳載體是個很不錯的功能,我常有個情境是:某人幫忙先墊了餐費/飲料錢、然後我想用網銀轉帳還錢。人家提供了行動銀行 App 的 QR code、但我跟對方不同銀行所以識別不了,於是需要面對那一長串落落長的帳號,再三確認有沒有打錯。

在 2025 的此時,大部分的行動銀行 App 都讀得懂 TWQR 格式了,但產出的 QR code 倒是不一定;另外,即使甲銀行可能已經使用這個格式,作為乙銀行用戶也很難確認這些 QR code 有沒有互通——我想我需要的是把 TWQR 那個(醜醜的)Logo 直接塞在 QR code 中間。

規格

目前我沒找到官方公開的規格書。

根據 財金公司 所出刊的《財金資訊季刊》第108期〈「科技創新.共享互通.開放普惠.接軌國際」 TWQR開啟新支付生態圈〉一文,現在所謂的 TWQR 格式始於 2017 時他們制定的〈QR Code 共通支付標準〉、並應用於 台灣 Pay,故我們可以確認台灣 Pay 所使用的 QR code 格式即為 TWQR 格式。

而第 91 期〈邁向多元發展之QR Code 共用平台及技術規格〉提及此共同支付標準格式為:

TWQRP://特店名稱/xxx?D類資料&E類資料&O類資料

但沒看到更多資訊細數這個 URI 每個部件的格式。

OSINT

在 GitHub 上挖到了 jefflin555/twpay_api 這的 repo,查了下看起來是 Jeff Lin 在 2018 年設計的 台灣 Pay 共同性 QR Code 產生器(批踢踢 #1R_uq239 (MobilePay)),其使用規格為:

TWQRP://銀行代碼NTTransfer/158/02/V1?D5=銀行代碼&D6=帳號&D10=901

並且他在 #1S13IDLt (MobilePay) 一文中有解釋欄位意涵如下,這些資訊是他反向工程推敲出來的:

TWQRP://銀行自訂的服務名稱/國家代碼/交易類別/V1?各類交易參數

國家代碼

使用 ISO 3166-1,台灣是 158

服務名稱

差不多怎麼亂打都沒差

交易類別

參數 意義
01 掃碼收付
02 轉帳交易
03 繳費交易

交易參數

參數 意義 格式
D1 金額 單位為百分之一元,故需要補兩個零
D2 訂單編號
D3 交易驗證碼
D4 繳費期限(帳單所列之期限) YYYYMMDD
D5 轉入銀行代碼
D6 轉入銀行帳號 16 位數,不足前方補 0
D7 銷帳編號
D8 服務名稱(店家收單名稱)
D9 附言欄
D10 交易幣別 ISO 4271,新台幣為 901
D11 收單銀行及其註記欄位
D12 QR code 有效期限 YYYYMMDDHHMMSS
D14 電子發票載具
D15 手續費 1 單位為百分之一元
D16 費用名稱
D20 備用欄位
D97 QR code 產生時間 YYYYMMDDHHMMSS
D98 ❓未知
D99 校驗碼

驗證

Jeff Lin 的資料主要是來自於台灣 Pay,我撈了幾隻行動銀行的產出,想確認格式是否依然相同。

我撈到的格式大概長成:

TWQRP://個人轉帳/158/02/V1?D1=金額&D5=銀行代碼&D6=帳號&D97=條碼產出時間&D98=未知&D99=某個雜湊值

這些資訊有符合 Jeff Lin 所描述的格式。

這段 URL 最有趣的就是服務名稱的字串,是直接使用中文「個人轉帳」四字,而這段非 ASCII 字串也衍伸了編碼問題。

在我的抽樣裡,玉山銀行採用了 Punycode 處理那四個中文字,而國泰銀行則是將整段 TWQRP://... 文字都用百分號編碼進行編碼;務實上這兩個行動銀行互相可以認得對方的 QR code,認定標準感覺挺寬鬆的。

實作

回到最初的命題,銀行們似乎已經開始改用 TWQR 格式了,但我覺得人們需要的是把 TWQR Logo 塞到那張 QR code 中央。

於是乎利用了 2025 的科技 a.k.a. Vibe Coding,做出了這個 side project:

https://showmethemoney.tzing.dev/

偉哉大語言模型,讓我這個幾乎沒有前端技能樹的人直接產出了一個可以離線執行的 PWA,然後直接整個網頁託管在 GitHub Pages 上、並且 QR code 是前端自行產生,所以不會產生後端伺服器的費用,程式碼放在 GitHub 上:

實驗

開發過程中有注意到 D 類參數不是每個行動銀行都會接受,以下紀錄手邊幾個銀行 App 支援的範疇:

D5(銀行代碼) D6(帳號) D1(金額)
012 台北富邦商業銀行
013 國泰世華商業銀行
808 玉山商業銀行
823 將來商業銀行
  1. 僅作顯示在交易頁面上參考用,實際收費照服務提供方決定