這個頁面的程式碼沒跑起來。

直接從資料夾裡開啟 index.html,瀏覽器會攔下 JavaScript 模組,於是你選好內容之後,頁面不會有任何反應。改用 http 把這個資料夾提供出去:

powershell -ExecutionPolicy Bypass -File serve.ps1

然後開啟 http://localhost:8080/。

QR Code 與條碼 離線產生 QR Code 和條碼

打進去,就變成一個碼。產生過程不往外送任何東西。

語言: 繁體中文
檢視原始碼
你的碼和碼裡的文字不會上傳。這裡根本沒有伺服器。

QR Code 不過是對一串字元做算術,沒有檔案要送,也沒有服務要求人。選模式、定版本、算裡德所羅門糾錯、挑掩碼、排條碼的粗細條、算下面那位校驗碼,每一步都發生在這個頁面裡,一千來行你能讀的 JavaScript。這個工具沒有任何聯網功能。這一條在這裡比在別的頁面更要緊,因為被編進碼裡的,常常是一個 Wi-Fi 密碼。

即時檢查: 檢查中…

離線: 檢查中…

別信我們嘴上說的。開啟開發者工具,盯著「網路」面板,往 Wi-Fi 那個表單裡打一個密碼。沒有一條請求帶走它的哪怕一個字元。或者乾脆拔掉網線,照產生不誤。

1 挑碼的種類

QR Code 什麼都裝得下,也是手機鏡頭預設要找的東西。條碼裝的是一串數字,而且要哪一種,通常輪不到你決定,商店、倉庫或者貨運公司要什麼就是什麼。

2 說清楚碼裡裝什麼

這個碼裡將要裝的那串字元
 

3 決定它長什麼樣

留白是碼的一部分,不是碼周圍的空地。規範要的是四個模組,一個被裁到邊的碼,很多掃描器根本看不見。

在下面印出字元 掃描器讀不出來的時候,得靠人來讀。零售條碼上還有幾位數字落在留白裡,那是故意的,它們標出了誰都不該裁掉的那片空白。

加一位校驗字元 Code 39 一般不帶這個。有些系統非要不可,只有你那套確實要,才加上,因為不期待它的讀取器會把它當成末尾多出來的一個字元。

乾脆不要背景 透明,用來放在本來就有顏色的東西上。SVG 和 PNG 都保住透明。不過最後墊在它後面的那層得是淺色,否則掃描器根本量不到對比。

QR Code
顏色和尺寸

4 拿走

該留著的是 SVG。它是以指令表達的碼,不是一堆畫素,印多大都不發虛。這一點在這裡比在別的圖片上更要緊,因為發虛的邊緣正是掃描器分辨不了的東西。

以 Markdown 檢視

不上傳怎麼產生 QR Code

  1. 先挑碼的種類。QR Code 什麼都裝得下,也是手機鏡頭預設要找的東西,所以除非有人另有要求,答案就是它。條碼裝的是一串數字,具體要哪一種,由將來掃它的那一方說了算:商店要 EAN-13 或者 UPC-A,運輸紙箱要 ITF-14,公司內部用的一般是 Code 128。
  2. 說清楚碼裡裝什麼。最常見的是一個連結,上面那幾個表單則負責拼出手機認得的其他格式:一個能自動加入的 Wi-Fi、一張能提示儲存的名片、一封郵件、一條簡訊、一個電話號碼、一個地圖位置。不管你選哪個,拼好的那串字元都會顯示在頁面上,因為QR Code 裡裝的從來就只有它。
  3. 決定它能挨多少損傷。四個等級放進去的糾錯資料一檔比一檔多,而糾錯越多,碼就越大越密。螢幕上看 L 就夠,普通紙張用 M,要被反覆摸、印得很小、或者貼在曬得到太陽的櫥窗上,用 H。選單上那種每天要擦一遍的碼,值得上 Q 或者 H。
  4. 定尺寸、留白和顏色。留白是碼的一部分。規範要求四邊各留四個模組的空白,把它裁掉,是印出來的碼掃不出來最常見的單一原因。深色在淺色上,而且對比要真夠:讀取器量的是兩者之差,所以白底淺灰不行,淺色在深底上更是有相當多的讀取器直接不認。
  5. 拿你手上這部手機試一下。印一千份之前,先掃螢幕上這個。十秒鐘的事,卻能擋住一整類預覽看不出來的毛病:Wi-Fi 密碼裡有個字元本該轉義、連結漏了 https://、條碼數字少了一位。
  6. 拿 SVG。它是以指令表達的碼,不是一堆畫素,所以印多大都不發虛,而發虛的邊緣正是掃描器最分辨不了的東西。你要貼進去的地方要是不認 SVG,那就順手也拿上 PNG,它按每個模組整數個畫素畫出來,同樣沒有糊掉的邊。

說得更細的版本

怎麼做一個到了別人手機上還掃得出來的 QR Code 糾錯等級該選哪個,QR Code 周圍那圈白為什麼是碼的一部分,印多大合適,還有免費產生器的「動態碼」日後要你付出什麼。

常見問題

我打進去的東西會被髮到什麼地方嗎?

不會。QR Code 就是對一串字元做算術,而這套算術在你自己的瀏覽器裡、你自己的機器上跑。這個工具沒有任何聯網功能,不取東西,也不發東西。頁面的 Content-Security-Policy 把它可能聯的地址全列了出來,沒有一個是本站的。這一點在這裡比在別的頁面更值錢,因為人們最常塞進QR Code 的,就是自家 Wi-Fi 的密碼。

這些碼會過期嗎?會哪天突然失效嗎?

不會,也不可能。你打進去什麼,碼裡就裝什麼,掃出來永遠是那串字元。會過期的是那種裡面裝著別人地址的碼:所謂「動態」QR Code,裝的是通往產生方伺服器的連結,再由那邊跳到你這裡。於是他們能數走每一次掃描,能改目的地,也能在試用期結束那天把它關掉。這裡沒有任何東西經別人中轉。

免費嗎?能商用嗎?

免費,沒有帳號,沒有水印,產生多少個都不限,結果放到產品上、海報上、店面上都行。QR Code 是電裝(Denso Wave)的註冊商標,他們公開表示不會對使用這種碼的人主張這項商標,規範以 ISO/IEC 18004 公開發布,任何人都可以自由實現,這個頁面做的就是這件事。本站帶廣告,經費就是這麼來的。

糾錯等級該選哪個?

沒有特別理由就選 M。L 產生的碼最小,螢幕上完全夠用;M 扛得住日常翻動;Q 和 H 留給那些要印得很小、要過塑、要貼櫥窗、或者中間會被 logo 蓋住一塊的碼。每往上一檔,塞進去的校驗資料就多一些,同樣多的文字就需要一個更大的圖形,從 L 換到 H,同一串字元的模組數大約要翻一倍。

一個 QR Code 能裝多少東西?

最大那一檔是 ⁦177 × 177⁩ 個模組,最多裝 7089 位數字、4296 個大寫字母和數字,或者 2953 位元組的其他內容,而這還是在最弱糾錯下的數字,最強糾錯大約只有三分之一。實際上卡住你的不是格式,是掃描器:過了幾百個字元,模組就小到普通手機鏡頭在一臂之外分辨不出來了。碼一長,通常說明裡面該換成一個短連結。

連結改成小寫,碼怎麼反而變大了?

因為 QR Code 有一種專門裝大寫字母和數字的模式,兩個字元壓進十一位;小寫沒有這種模式,一個字元要八位。同一個網址寫成 HTTPS://EXAMPLE.COM/PAGE,可以比小寫版本小三分之一。協議名和主機名本來就不區分大小寫,喊成大寫除了變小什麼都不影響;主機後面那段路徑可是區分的,別去動它。

它能掃碼嗎,還是只能產生?

這一頁做不到,隔壁那頁可以:識讀工具接一張照片、一張截圖或者你的鏡頭,把裡面那串字元還給你。這比畫一個碼大得多——在一張圖裡找出那個圖形、把拍攝角度糾正回來、再把破損的地方修回來,這三件事這一頁壓根不用面對——所以它是一個單獨的工具,而不是這裡的一個按鈕。它按這裡一貫的規矩來:什麼都不上傳,鏡頭的畫面也一幀不留。

留白是做什麼的,能不能少留點?

QR Code 周圍那圈白不是裝飾,是碼的一部分。讀取器靠它判斷這個圖形在哪裡結束,規範要求四邊各留四個模組,條碼則要十個左右。這裡你確實可以把它設成零,畫面是清爽了,可相當多的掃描器從此就看不見它了,背景一花更是如此。地方不夠,那就把碼做小,別去動它的留白。

我該用哪種條碼?

掃它的那一方要哪種就用哪種。北美之外的零售條碼是 EAN-13,北美是 UPC-A,兩者都需要一個由 GS1 發給你的號碼,因為那串數字標識的是你的公司,不只是這件商品。EAN-8 是給小包裝用的短版本。ITF-14 印在運輸紙箱上。Code 128 和 Code 39 除了數字還能裝文字,而且完全不用註冊,公司內部的東西用它們最合適:固定資產、貨架、工單。

校驗位是什麼,工具為什麼自己加了一位?

它是零售條碼的最後一位,由前面幾位算出來,好讓掃描器分得清「讀錯了」和「讀對了」。EAN-13 要你給十二位,第十三位它來算;UPC-A 要十一位,第十二位它來算。你打短的,這個頁面替你補上;你打全的,它會核對你給的那一位,對不上就拒絕,而不是悄悄改掉。一位數字被悄悄「修正」,等於印出一張掃出來是別人商品的標籤。

能在 QR Code 中間放個 logo 嗎?

這裡不行,但別處為什麼行,值得知道:靠的正是糾錯。H 級下大約 30% 的模組被毀掉,碼依然讀得出來,所以一個蓋住比這少一些、又正好落在中間那塊沒有定點陣圖形的地方的 logo,屬於能被修回來的損傷。做法是:用 H 級產生,拿到你的影像軟體裡去蓋,logo 控制在面積的五分之一以內,然後拿真手機測,別憑感覺信它。

為什麼 SVG 比 PNG 好?

因為碼是由邊緣構成的,而 PNG 只有固定數量的畫素來拼這些邊緣。放大一張 PNG,每條邊都發虛,而發虛的邊正是掃描器最頭疼的;給一臺 1200 dpi 的印表機一張 512 畫素的 PNG,等於讓它自己編出那些差別來。SVG 是以指令表達的方塊,所以印在名片上和印在廣告牌上都一樣銳利。這裡的 PNG 按每個模組整數個畫素畫出來,那已經是 PNG 能做到的最好情況。

斷網能用嗎?

能。頁面開一次之後斷網,它照常運作。這也是證明「什麼都沒上傳」最省事的辦法。一個把你的文字送出去畫碼的工具,拔線那一刻就停了。