一個副業專案先被裝進了所有手機:ZXing 的介面,是一條畫好的斑馬線
從掘金一篇技術長文看起,觀察 ZXing 這個 2007 年誕生的開源條碼庫,如何以極簡的介面與斑馬線般的命名,成為全球二維碼識別的底層標準。
2026 年 10 月 10 日,掘金上一篇標題為「為什麼越來越多人用 ZXing?」的技術長文再次把這個老庫推上討論。文章作者是「蘇三說技術」,內容從支付收銀臺的主掃與被掃講起,最後拆解到 ZXing 的 API 與編解碼流程。一個快十九年的 Java 開源庫,為什麼還值得被反覆拿出來講,這本身就是一個設計問題。
先從最容易被忽略的細節看起:名字。ZXing 的發音是「zebra crossing」,斑馬線。一個條碼辨識庫把自己命名成馬路上最古老的視覺指引系統,黑白相間、規則間隔、人人看得懂。這個命名幾乎是宣告了它的設計意圖:辨識黑白條紋,把混亂的影像導引成可讀的資料。名字先於功能,把用途說完了。
出身:一則部落格公告裡的實驗性格
依該文引述,ZXing 最初是 Google 員工的「20% 時間」副業專案。2007 年 11 月,Google 開發者部落格上的公告寫得很節制:它還不完整,開源出來有點實驗性質,「還不是史上最好的條碼閱讀器,但看起來還不錯」。
這段措辭值得細讀。它沒有宣示雄心,反而明確降級期待。對照後來的結果,微信、支付寶、淘寶、美團這些 App 的二維碼識別底層能力都源自它,Android 系統的掃碼功能預設也用它,GitHub 上累積約三萬四千顆 Star,採 Apache 2.0 協議。當年那句「看起來還不錯」,被時間撐成了一個產業的地板。
介面:兩行核心程式碼的排版哲學
技術庫的美學,往往體現在 API 的長相上。該文給出的生成範例裡,核心只有兩行:把字串編碼成 BitMatrix,再寫成圖片檔。依賴座標系 com.google.zxing,版本 3.5.3,兩個 artifact,core 與 javase,乾淨地分開了純邏輯與平臺橋接。
這種切分本身就是設計。核心編解碼不綁定任何圖形環境,所以它才能被移植到 C++、Objective-C、各種語言,成為跨平臺的公共財。介面越薄,壽命越長,這在程式庫的世界裡比任何行銷都有效。
格式支援的廣度同樣是介面的一部分。二維的 QR Code、Data Matrix、Aztec、PDF417,一維的 UPC、EAN、Code 39、Code 128 等,全部收在同一套 API 之下。對使用它的工程師來說,這代表不管面對的是付款碼、商品條碼還是機票上的 PDF417,呼叫方式是一致的。一致性就是這個庫最安靜的設計主張。
流程:三個角落的方塊,先於一切解碼
該文對識別流程的描述很短,但畫面感很具體:先找到二維碼的探測圖形,也就是三個角落那三個方塊,校正影像,再逐位解碼。生成端則是反過來,把文字轉二進位,加入糾錯碼,按標準填進矩陣,渲染成圖。
三個定位方塊是 QR Code 規範裡最成功的視覺設計之一。它讓機器不需要知道圖片的方向與尺度,先抓住三個錨點,畫面就被擺正了。ZXing 的工作是把這套已經被標準化好的視覺語言,翻譯成最短的路徑。辨識的順序被設計成:幾何先於語意。這跟好的排版是同一件事,先對齊,再閱讀。
觀點
為什麼越來越多人用 ZXing?答案不在功能清單裡,而在它從命名、公告措辭到 API 切分的每一層都選了薄的那一邊。斑馬線不會有人記得設計者是誰,但每個人都踩著它過馬路。一個 2007 年的實驗性副業專案能成為今天的預設底層,靠的是克制,而非野心。這大概是所有想做長壽產品的人,最值得參考的一頁原始碼。