掃一下就存聯絡人:vCard QR Code 自己做
有些名片、簡報最後一頁或活動識別證上會印一個 QR Code,手機相機對準它,畫面就跳出「新增聯絡人」,姓名、電話、Email 一次填好。這個效果不需要什麼特殊服務,背後只是一段叫做 vCard 的純文字,被編碼進 QR Code 而已。
整個流程只有兩步:
- 寫一段 vCard 文字(也可以存成
.vcf檔)。 - 把這段文字原封不動轉成 QR Code 圖檔。
下面依序說明。文中所有姓名、電話、Email 都是示範用的假資料,example.com 是網路標準保留給範例用的網域。
vCard 是什麼
vCard 是交換「電子名片」的標準格式,規格由網際網路工程任務組(IETF)以 RFC 文件發布。常見的有兩個版本:
| 版本 | 規格文件 | 發布時間 | 現況 |
|---|---|---|---|
| 3.0 | RFC 2426 | 1998 年 9 月 | 已被 RFC 6350 取代,但仍廣泛使用 |
| 4.0 | RFC 6350 | 2011 年 8 月 | 目前的標準版本 |
RFC 6350 登記的副檔名是 .vcf 與 .vcard,媒體類型是 text/vcard。從手機或電腦通訊錄「分享聯絡人」匯出的檔案,通常就是 .vcf。
一份 vCard 以 BEGIN:VCARD 開頭、END:VCARD 結尾,中間每一行是一個欄位,格式是「欄位名稱:內容」,必要時在欄位名稱後面用分號加上參數。
一份 vCard 3.0 範例
BEGIN:VCARD
VERSION:3.0
N:王;大明;;;
FN:王大明
ORG:範例股份有限公司
TITLE:業務經理
TEL;TYPE=WORK,VOICE:+886-2-1234-5678
EMAIL;TYPE=INTERNET:daming@example.com
URL:https://example.com
END:VCARD
逐行說明:
VERSION:3.0:宣告版本,3.0 規格要求這一行的值必須是「3.0」。N:王;大明;;;:結構化姓名,用分號分成五格,依序是「姓;名;其他名字;前置稱謂;後置稱謂」,用不到的格子留空但分號要保留。FN:王大明:顯示用的完整姓名,也就是通訊錄列表上看到的名字。ORG、TITLE:公司與職稱。TEL;TYPE=WORK,VOICE::電話,TYPE參數標示類型,例如WORK(公司)、HOME(住家)、CELL(行動電話)、FAX(傳真);寫成+886開頭的國際格式,在國外掃描也能直接撥。EMAIL、URL:電子郵件與網站。
如果要放地址,欄位是 ADR,同樣用分號分成七格:郵政信箱;延伸地址;街道;城市;行政區或州;郵遞區號;國家。RFC 6350 建議前兩格(郵政信箱、延伸地址)留空以提高相容性。不過要不要放地址,後面「個資」一節會再談。
3.0 和 4.0 差在哪
同一張名片寫成 4.0 版大概是這樣:
BEGIN:VCARD
VERSION:4.0
FN:王大明
N:王;大明;;;
ORG:範例股份有限公司
TITLE:業務經理
TEL;VALUE=uri;TYPE="work,voice":tel:+886-2-1234-5678
EMAIL;TYPE=work:daming@example.com
URL:https://example.com
END:VCARD
主要差異整理如下:
| 項目 | vCard 3.0(RFC 2426) | vCard 4.0(RFC 6350) |
|---|---|---|
| 必要欄位 | VERSION、N、FN 三個都必須有 |
只有 VERSION、FN 必須有,N 改為「建議要有」 |
| 字元編碼 | 由外層的傳輸環境指定字元集,規格只說 UTF-8 較佳 | 一律 UTF-8,不能改用其他編碼 |
| 電話寫法 | TEL;TYPE=CELL:號碼 |
建議寫成 URI:TEL;VALUE=uri;TYPE=cell:tel:號碼 |
| 規格狀態 | 已被取代 | 現行標準 |
對自製名片來說,最有感的是編碼:4.0 明訂 UTF-8,中文姓名、公司名稱比較不會出現亂碼。但新版本不代表每個裝置都讀得順,舊型手機或某些通訊錄軟體對 4.0 的支援程度不一。兩個版本都可以用,實務上最可靠的做法是:做好之後,拿手邊的 iPhone 和 Android 手機各掃一次,確認姓名、電話、中文字都正確,再拿去印。
常見的格式地雷
vCard 是很「死板」的純文字格式,下面幾個問題最常讓 QR Code 掃得出來、卻存不進聯絡人:
- 冒號、分號要用半形:中文輸入法打出來的全形冒號「:」不會被當成分隔符號,整行會被忽略或判讀錯誤。
- 不要用 Word 之類的文書軟體編輯:它可能自動把引號換成彎引號、合併或改變換行,讓格式壞掉。用系統內建的純文字編輯器(記事本、TextEdit 的純文字模式)或程式編輯器即可。
- 內容裡有逗號、分號、反斜線要跳脫:例如公司名稱裡有逗號,要寫成
\,;分號寫成\;;反斜線寫成\\。 - 換行:規格要求每一行用 CRLF(Windows 式換行)結尾,長行建議在 75 個位元組處折行。多數軟體對只用 LF 的檔案也讀得懂,但如果某台裝置讀不出來,換行格式是值得檢查的地方。
BEGIN和END要成對:漏掉END:VCARD,有些掃描程式會直接當成一般文字處理。
把 vCard 轉成 QR Code
QR Code 本身只是一種「裝資料的容器」,把上面那段文字整段編碼進去,手機掃到開頭是 BEGIN:VCARD 的內容,就會辨識成聯絡人。
產生 QR Code 的工具很多,網路上的線上產生器也到處都是。不過要記得,把 vCard 貼進某個網站,等於把這些個資交給對方的伺服器處理;有些服務產生的還是「動態 QR Code」,圖上其實是一個導向對方網站的短網址,哪天服務收費或關站,印出去的碼就失效。比較穩妥的原則是:
- 優先用離線或開源的工具,讓資料留在自己的電腦。
- 確認產生的是「靜態」QR Code:vCard 內容直接寫在圖裡,不經過任何第三方網址。
以開源的 libqrencode 為例,它附帶一個命令列工具 qrencode,可以直接讀取檔案產生圖片:
qrencode -r card.vcf -l M -o card.png
qrencode -r card.vcf -l M -t SVG -o card.svg
-r card.vcf:從檔案讀取要編碼的內容。-l M:容錯等級。-o:輸出檔名;-t SVG輸出向量圖,印刷時放大也不會糊。
QR Code 有 L、M、Q、H 四種容錯等級,等級越高,污損時能還原的比例越高(大約從 7% 到 30%),但同樣的內容會產生更密、更大的碼。依 QR Code 發明者 DENSO WAVE 的說明,一般最常選的是 M 級(約 15%)。
另外兩個實用原則:
- 欄位越少,碼越好掃:中文字在 UTF-8 裡每個字佔 3 個位元組,欄位一多,QR Code 的格子就變得又小又密,印在名片這種小尺寸上容易掃不到。只放真正需要的欄位。
- 四周留白:QR Code 周圍要保留一圈空白(
qrencode預設會留),不要讓邊框或文字貼著它。
印出去之前:QR Code 等於公開這些個資
這是最容易被忽略的一點。QR Code 不是加密,任何人拿手機一掃,就能讀出裡面每一個欄位,而且一旦印出去、發出去,就沒辦法收回。名片可能被轉交、被拍照上傳,簡報檔會被轉寄,海報會被路人拍下來。
所以在決定放哪些欄位之前,先想一下「如果這張圖被公開在網路上,我能接受嗎?」:
- 對外用的名片碼,只放本來就公開的聯絡方式:公司電話、公務 Email、公司網站。
- 私人手機、住家地址、生日這類欄位不要放,真的需要,再當面另外交換。
- 不同用途做不同的碼:給客戶的、給活動參加者的、給熟人的,內容可以不一樣。
- 資料變更要重印:靜態 QR Code 的內容寫死在圖裡,換工作、換電話之後,舊名片上的碼就會一直流傳舊資料。
小結
- vCard 是一段純文字,3.0 版必須有
VERSION、N、FN,4.0 版必須有VERSION、FN,且一律使用 UTF-8。 - 用半形符號、純文字編輯器,特殊字元記得跳脫。
- 用離線或開源工具產生靜態 QR Code,容錯等級選 M 通常就夠。
- 做好後用不同手機實際掃描測試。
- 只放願意公開的欄位,因為 QR Code 等於把裡面的資料印成一張任何人都讀得到的圖。
參考資料
- RFC 6350: vCard Format Specification(vCard 4.0)
- RFC 2426: vCard MIME Directory Profile(vCard 3.0)
- RFC 3966: The tel URI for Telephone Numbers
- QRcode.com(DENSO WAVE):Error correction feature
- QRcode.com(DENSO WAVE):Information capacity and versions of QR Code
- libqrencode(開源 QR Code 產生函式庫與 qrencode 工具)
留言討論
留言載入中…
留言會公開顯示,請遵守留言規範;違規留言會被移除。