黃 樂,王 斌,王衛亞
(長安大學 信息工程學院,陜西 西安 710064)
二維條碼PDF417是一種高密度、高信息含量的便攜式數據文件,是實現證件及卡片等大容量、高可靠性信息自動存儲、攜帶并可用機器自動識讀的理想手段。它可以將照片、指紋、掌紋、簽字、聲音、文字等凡可數字化的信息進行編碼。它作為一種新的信息存儲和傳遞技術,從誕生之初就受到了國際社會的廣泛關注。經過幾年的努力,現已被廣泛地應用在國防、公共安全、交通運輸、工業、商業、金融、海關及政府管理等領域。PDF417最大的優勢在于其龐大的數據容量和極強的糾錯能力,同時對印制要求不高,可用多種閱讀設備閱讀,另外,碼制已公開且形成國際標準,我國也已制定了PDF417碼的國標。此外,二維條碼還具有成本低、信息可隨載體移動、不依賴于數據庫和計算機網絡、保密防偽性強等優點,再結合我國人口多、底子薄、計算機網絡投資資金難度較大、對證件的防偽措施要求較高等特點,可以預見,二維條碼PDF417在我國極有推廣價值。本文結合此情況對PDF417的編碼和解碼進行分析和研究,開發出一套二維條碼PDF417編碼和解碼系統。
PDF417條碼符號是一個多行結構[1-2]。符號的頂部和底部為空白區,上下空白區之間為多行結構。每行數據符合字符數相同,行與行左右對齊直接銜接,其最小行數為3,最大行數為90,符號結構圖如圖1所示[1]。

圖1 PDF417條碼符號結構圖Fig.1 Structure diagram of PDF417 barcode symbol
每行構成如下:(A)左空白區;(B)起始符;(C)左行指示符號字符;(D)1~30個數據符號字符;(E)右行指示符號字符;(F)終止符;(G)右空白區。其中每一符號字符由4個條和4個空構成,自左向右從條開始,每一個條或空包含1~6個模塊,在一個符號字符中,4個條和4個空的總模塊數為17,因此稱之為417碼。
PDF417有 3種數據壓縮模式[1]:文本壓縮模式(TC)、數字壓縮模式(NC)和字節壓縮模式(BC)。在一個條碼符號編碼中,可通過應用模式鎖定/轉移(Latch/Shift)碼字進而運用多種模式表示數據。
文本壓縮模式(TC)主要包括4個子模式[3]:大寫字母型子模式(Alpha)、小寫字母型子模式(Lower Case)、混合型子模式(Mixed)和標點型子模式(Punctuation)。子模式的設置是為了更有效地表示數據,每種子模式選擇了文件中出現頻率較高的一組字符組成的字符集。在子模式中,每一個字符對應一個值 (0~29),這樣可用一個單獨的碼字表示一個字符對,表示字符對的碼字計算公式如下:碼字=30×H+L,其中:H、L分別表示字符對中的高位和低位字符值。
數字壓縮模式(NC)是指從基10至基900的數據壓縮的一種方法。它能把約3個數字位用一個碼字表示,一般當連續的數字位數大于13時用此種模式。在數字模式下,根據以下算法對數字位進行編碼:1)將數字序列從左向右每44位分為一組,最后一組包含的數字位可少于44個。2)對每一組數字:首先在數字序列前加一位有效數字1(即前導位),然后執行基10至基900的轉換。例如:數字序列000213298174000的表示過程為:首先,對其進行分組。因其共有15位,故只有一組;其次,在其最左邊加1,將得到數字序列1000213298174000;最后將其轉移成基900的碼字序列,結果為:1,624,434,632,282,200。
字節壓縮模式(BC)是通過基256至基900的轉換,將字節序列轉換為碼字序列。對于字節壓縮模式,有兩個模式鎖定(901,924)。當所要表示的字節總數不是6的倍數時,用模式鎖定901;當所要表示的字節總數是6的倍數時,用模式鎖定924。在應用模式鎖定924的情況下,6個字節可通過基256至基900的轉換用5個碼字表示,從左到右進行轉換。例如:一個二位16進制的數據序列01H,02H,03H,04H,05H,06H (H代表16進制)可表示為一個碼字序列924,1,620,89,74,846。
對于一組給定的數據碼字,錯誤糾正碼字根據Reed-Solomon 錯 誤控制碼算法來計算[1,4-5]。
第一步:建立符號數據多項式。
符號多項式如下:

式中di是數據碼字。
第二步:建立糾正碼字的生成多項式。
k個錯誤糾正碼字的生成多項式如下:

式中 k為錯誤糾正碼字 ci(i=0...k-2,k-1)的個數。
第三步:錯誤糾正碼字ci的計算。
對一組給定的數據碼字和一選定的錯誤糾正等級,ci為符號數據多項 d(x)式乘以 xk,然后除以生成多項式 g(x),所得余式的各系數的補數。
本文采用VC++6.0作為軟件系統開發工具,搭建前臺人機界面,該界面主要分為3部分,分別是編碼區、解碼區和其他按鈕操作區。在編碼區主要操作有編碼文本輸入、糾錯等級和條碼列數的設置、條碼的生成及保存。在解碼區主要操作有選擇待解碼的條碼和對條碼進行解碼。在其他按鈕操作區主要實現條碼的打印和退出系統的功能。
由于二維條碼PDF417可將照片、聲音、文本等多種信息進行編碼,本文實現的是常用的文本信息編碼。計算機編碼就是指將相關文本信息轉換成可實現條碼繪制的碼字,同時再加入相關的附加信息。基本流程:利用編碼算法將文本信息轉換成PDF417碼字,然后通過查詢數據庫將碼字進一步轉換成相對應的條空相間(黑白相間)的符號字符,最后計算機繪制出這些黑白相間的條空,即得到本文實現的PDF417二維條碼圖像。具體的軟件實現流程如圖2所示[5]。

圖2 二維條碼PDF417編碼流程圖Fig.2 Flow chart of 2d barcode PDF417 encoding
理論上,解碼的過程是編碼的逆過程,通過解碼不但可以實現對條碼的識別,而且還可以進一步驗證編碼的正確性。首先計算機要獲取到待解碼的PDF417二維條碼,然后對該條碼進行全部掃描,并將掃描結果存在一個二維數組中,接下來將掃描到的條碼符號轉換成碼字,再將碼字按照不同的編碼規則轉化為可讀的字符、漢字等相關文本信息并在計算機屏幕上顯示出來[6]。本文通過對系統編碼實現的PDF417二維條碼進行解碼對比,解碼得到的文本信息和編碼時輸入的文本信息完全一致,也進一步驗證了編碼的準確性。
以原始條碼文本信息“長安大學直屬國家教育部,是教育部和交通運輸部、陜西省人民政府共建的國家211工程重點建設大學0123456789abcdefghPDF417”為例,利用該系統對其進行編碼和解碼,其中糾錯等級和條碼列數分別設置為1和5,實現界面如圖3所示,最終編碼生成的PDF417二維條碼如圖4所示,以bmp格式將其保存在指定的文件夾中。最后點擊打印編碼按鈕,選擇以Adobe PDF Converter類型打印編碼后的PDF417二維條碼,結果如圖5所示。

圖3 二維條碼PDF417編解碼軟件實現界面Fig.3 Software interface of 2d barcode PDF417 codec

圖4 二維條碼PDF417編碼實驗結果Fig.4 Experiment result of 2d barcode PDF417 encoding

圖5 二維條碼PDF417編碼打印測試結果Fig.5 Result of 2d barcode PDF417 print test
文中在分析和研究二維條碼PDF417的結構和編解碼原理的基礎上,以VC++6.0為開發環境,開出一套簡易的二維條碼PDF417編解碼系統,實現了對漢字、字母、數字等文本信息進行編碼,以及對該系統生成的PDF417二維條碼進行解碼。該系統編碼精確,速度快,方便靈活,同時還實現了對編碼后的PDF417二維條碼的解碼和打印。此外,該系統再配置上其它相關硬件控制設備,即可制成一套PDF417二維條碼打印和掃描系統。總之,二維條碼在我國有著廣闊的應用前景,PDF417二維條碼技術在我國的推廣應用也必將為我國信息產業的發展和現代化的經濟建設帶來可觀的社會效益和經濟效益。
[1]中華人民共和國國家標準GB/T17172-1997.四一七條碼[S].1997.
[2]謝金龍,武獻宇,楊立雄,等.PDF417二維條碼的設計與實現[J].物流工程與管理,2011,33(4):88-89.XIE Jin-long, WU Xian-yu, YANG Li-xiong, et al.Design and implementation of two-dimension barcode[J].Logistics Engineering and Management,2011,33(4):88-89.
[3]武莎莎.基于Delphi的PDF417條碼編碼系統[J].山西電子技術,2009(5):41-42.WU Sha-sha.PDF417 Barcode encoding system based on Delphi technology [J].Shanxi Electronic Technology,2009(5):41-42.
[4]趙博,黃進.二維條碼PDF417編碼原理及其軟件實現[J].包裝工程,2007,28(1):96-98.ZHAO Bo,HUANG Jin.Code theory of two dimension bar code PDF417 and its creating software[J].Packaging Engineer,2007,28(1):96-98.
[5]孫靜,陳偉.PDF417二維條碼的編碼技術及其在Visual Basic下的實現 [J].西安石油大學學報:自然科學版,2005,20(1):77-80.SUN Jing,CHEN Wei.Coding technology of PDF417 two dimensional bar code and implementation in Visual Basic[J].Journal of Xi’an Shiyou University:Natural Science Edition,2005,20(1):77-80.
[6]李媛,李紅星,張益農.二維編解碼技術研究與應用[J].北京聯合大學學報:自然科學版,2007,21(4):10-14.LI Yuan, LI Hong-xing, ZHANG Yi-nong.Research and Application of Encoding and Decoding on two-dimension bar code [J].Journal of Beijing Union University:Natural Sciences,2007,21(4):10-14.