一維條碼機功能擴充之研究

2022021510:33
由於工作需求,我手邊有支淘寶買的條碼掃描器,超級好用,省了很多手動輸入的時間,直接掃條碼就可以搞定的事,傻了才手動key in。

但最近需要處理其他類型文件,當掃入一串數字時,需要略過前六個字元,換言之,只需要提取第7個字元以後的字串,不過使用指南裡面只附上了略過1、2、3、5個字元的設定碼,偏偏沒有4和6的,問了賣家客服也不知道。


我翻了其他幾家掃碼器的手冊,不知道是廠商都抄來抄去來還是怎的,居然大家都只能略過前置1、2、3、5個字元,也都沒有4和6,是有沒有那麼巧...

我分析了一下,只有紅線處不同,是否只要變更此處就有可能達到我的需要?


先用手機下載barcode scanner的APP來掃看看這些條碼是甚麼意思。

掃描「隱藏前置字符1位字符」條碼後出現023401,其他以此類推分別是023402、023403、023405,「隱藏前置字符6位字符」應該就是023406。但若是用線上barcode generator直接輸入以上023401等字串,出現的條碼卻和手冊上的條碼不同。

這也不難理解,畢竟明碼文字掃出來是023401,但實際內容應該不是單純023401。
因為這是給掃碼器設定用的專用條碼,若只是單純用023401這段文字去做設定就能奏效的話,那萬一哪一天掃碼器真的掃到一段條碼文字內容是023401,那掃碼器要認定是設定用條碼,還是文字023401?

後來有位前輩pucheng0705分享了一個網站ZXing Decoder Online,直接把條碼圖案上傳後就可以分析內容。

上傳「隱藏前置字符1位字符」條碼後會分析出以下結果:

條碼也有許多編碼規則,此條碼是採用Code 128,看到Raw bytes那一行就恍然大悟了,原來就是HEX轉BIN來繪製條碼。
依據其他條碼可以推斷出第6個byte的01改06就是「隱藏前置字符6位字符」,但問題就是第7個byte檢查碼1e要改成什麼?

參照維基百科,Code 128的結構是「起始碼+資料+檢查碼+結束碼」
第1個byte乘1,第2個byte開始依序乘上1~5,最後加總後得出570,再除以103,餘數55就是檢查碼(checksum)


就可以得到正確條碼68 60 63 02 22 06 37 6A,再把HEX轉成上圖左邊的binary,就可以得到11010010000 10111100010 10111011110 11001100110 10001011000 10011001000 11101000110 11000111010。
1就代表細黑線,0就代表細白線,用這種方式配合excel就能畫出以下條碼。


畫出條碼後就要來實測了,拿條碼機掃以上條碼後...


還真的可以用,爽!

後來也是高手指點,Code 128有四個功能字元FNC1~FNC4,而本條碼第2個byte的60就代表FNC3,所以先到On line barcode generator,直接在資料欄位輸入「\<FNC3>023406」,就可以立即產生正確的條碼,非常省事。


擴充功能後的條碼機更好用了~


至於條碼機有支援這功能,但為何各家條碼機都不在手冊上列出隱藏前置或後置4或6字符的功能,我唯一想到的理由就是...

在牆內遇到「六四」就會自動屏蔽吧。

 


  •   Sadern 於 2022-03-08 06:29 1F
  • 本來是很認真看知識的,但看到最後一句話反而會心一笑了