![VFP 愛用者社區 首頁](templates/subSilver/images/vfps.jpg) |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
spfrk
註冊時間: 2004-11-08 文章: 161
第 1 樓
|
發表於: 星期六 六月 22, 2013 10:57 pm 文章主題: QR CODE 二維條碼之簡介與列印 |
|
|
QR CODE 二維條碼的簡介與列印
1.簡介
QR CODE 是眾多二維條碼的其中一種, 於 1994 年由日本 Denso-Wave 公司
發展出來, 原先是要用於汽車零件的管理與追蹤, 後來 Denso-Wave 也不知
道哪根神經不對勁, 還是佛心來也, 免費開放給大眾使用, 但仍保有其專利
權, 就是因為這樣, 所以很快的流傳開來, 而其他要收費的二維條碼就乏人
問津了.
QR 是 Quick Response 快速反應的英文縮寫, 我覺得也沒快到哪裡去, 倒是
流行竄起的速度很快, 就是免費嘛 !, 目前所使用的一維條碼所使用的空間太
大, 造成無法在有限的空間儲存較大的資料, 如生鮮食品, 就可以放入生產地,
農夫個人資料, 保鮮期 ...等資料, 因此才有二維條碼的需求產生.
二維條碼好像很玄, 事實上還是一維的模式, 只是因為加了容錯的功能, 才有
二維的說法, 基本上在一定的破損程度上是可以修正回來的, 其原理就是取樣
與對照, 這樣就形成二維的架構, 當然要有容錯的功能, 就要犧牲部分空間,
來儲放這些運算後的容錯資料, 導致減少正常資料的儲放, 因此二維條碼的容
錯的功能是有分等級的, 等級越高, 儲存資料的空間越小, 容錯能力分為 4等
級, L 7%, M 15%, Q 25%, H 30%.
二維條碼的資料儲存空間除了受容錯等級的影響外, 還有資料的模式, 有分以
下 4種模式, 數字(多), 英數字(次多), Byte(少), 中文(最少), 因此影響二
維條碼的儲存效能因素還不少.
QR CODE 共分 40個版本, 其實版本是指容量大小, 版本 1 是 21*21 塊模組,
版本 2 是 25*25 塊模組, 版本 40 是 177*177 塊模組, 版本號數越大, 圖素
就越多, 當然圖像就越大, 到底有多大呢 ? 舉個例子, 現在的各大超商, 超市,
大賣場所開立紙本電子發票上的 QR CODE 內容為 77 Bytes 英數模式, 黑點大
小為 3, 就要用到版本 4才夠用.
QR CODE 的編碼方式是以二進制組成, 也就是 0 與 1, 黑(有顏色)與白底, 隨
著資料的型態的不一樣所容納的資料量與大小就會有變化.
舉例: 純數字模式, 每一個數字只要 4 Bits ( 1 2 4 就能表現出 0 - 9
如 123 就變成 000100100011 , 這樣就 12 Bits 就能表示出 123 了.
舉例: 英數字模式, 每一個英數字數要 7 Bits ( 1 2 4 8 16 32 64) 才能表現
出 0 - 9, 標點符號, A - Z, 如 ABC 就是 1000001100001010000011
如果是中文字(雙位元系統), 那就沒有壓縮的空間了, 因此中文字所能儲存的資料
量就變少了, 以下是各版本的儲存容量對照表
Version Error Correction Level Numeric AlphaNumeric Byte Kanji
1 L 41 25 17 10
M 34 20 14 8
Q 27 16 11 7
H 17 10 7 4
2 L 77 47 32 20
M 63 38 26 16
Q 48 29 20 12
H 34 20 14 8
.
.
.
由以上的對照表看來, 容錯與資料模式直接影響儲存容量, 正是所謂 "天下沒有
白吃的午餐".
2.列印
QR CODE 二維條碼的列印可以分成 2種方式列印
1.專業的條碼列印機, 透過程式送出控制指令的方式來列印, 這部份就比較複雜,
因為二維條碼的指令是屬於 "Page Mode", 而一維條碼與文字的部份是
"Line Mode", 所以必須切換來切換去的, 在程式的寫作上, 並不好寫, 但其
優點是速度飛快, 一張 9公分的紙本電子發票, 只需 2秒鐘就可以印完, 並且可
以控制得很嚴謹, 因為紙本電子發票可以對獎, 所以對於印表機的狀況要即時掌
握, 如快沒紙, 上蓋沒蓋好, 卡紙, 切刀卡住, 無法列印...,必須確保列印是完
整的.
2.使用一般的雷射印表機或高階的噴墨印表機來印 QR CODE 二維條碼,這是很困難
的, 二維條碼的運算過程很複雜, 對於一般的程式設計人員, 幾乎是不可能的任
務, 我也是一樣, 就到處找一些 DLL 或 OCX 來列印二維條碼, 但是非常難找,
如果要用買的, 都在 200 - 300 美元, 而且信用卡付款, 風險很大, 望之卻步,
更遑論 source code 了,我連續找了一個多月, 眼睛都要快脫窗了, 又到大陸的
網站找, 電腦還差點中毒, 但是為了各位狐友的福利, 終於皇天不負苦心人, 找
到了 C source 與 DLL, 而且很好用.
所附的 C source 是標準的 C, 但是使用了一些 WINDOWS SYSTEM API, 如果要移
植到別的作業系統, 是要費點手腳, 沒有附使用說明, 因為看看 source code 就知
道了, 有些狐友不會 C 語言,就不知道如何使用了, 解開壓縮檔, 目錄 \Binaries
裡面放了 DLL, 有 32位元與64位元的.
以下是 FoxPro 的範例, 會產生 BMP 與 PNG 檔, 有了圖檔, 在 FoxPro 就能列印了
declare GenerateBMP in quricol32.dll string, string, integer,integer,integer
declare GeneratePNG in quricol32.dll string, string, integer,integer,integer
參數 1 圖檔名(可含路徑)
參數 2 QR CODE 的資料, 會自動判斷長度與資料模式來決定版本.
參數 3 QR CODE 圖像的邊界點數,如果是放在白紙上, 可設成 0.
參數 4 點圖素的大小, 必須大於等於 3 或 4, 否則會太小, 刷不出來.
參數 5 容錯等級 0 - 3, 0 是 L 7% 等級.
範例 :
GenerateBMP("MyQrcode.bmp", "EPOS 宜普科技 凌培軍 0927-217786", 0, 3, 0)
GeneratePNG("MyQrcode.png", "EPOS 宜普科技 凌培軍 0927-217786", 0, 3, 0)
quricol32.dll 有支援 unicode, 並且有一些其他的功能, 在這裡賣個關子,嚐試
去看一下 source code, 就會有收穫.
spfrk 在 星期日 六月 23, 2013 10:35 am 作了第 1 次修改 |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
ericklin
註冊時間: 2007-11-14 文章: 107 來自: 台中市
第 2 樓
|
發表於: 星期日 六月 23, 2013 2:09 am 文章主題: |
|
|
感謝分享 非常的贊 已收納 |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
arthur
註冊時間: 2003-11-05 文章: 18
第 3 樓
|
發表於: 星期日 六月 23, 2013 3:21 am 文章主題: |
|
|
這個一定要收納的 |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
ckp6250
註冊時間: 2004-07-30 文章: 1644
第 4 樓
|
發表於: 星期日 六月 23, 2013 9:57 pm 文章主題: |
|
|
抱歉,有點不太明白,請教則個
『QR CODE 是眾多二維條碼的其中一種』
既然是眾多的一種,那麼,是否表示,即使我們用了 QR CODE
也有可能在某些場合並不適用?
另一點疑問,如果是罕用字,比如中文全字庫上的一些怪字
當我們做成QR CODE後,拿給別人去掃瞄時,
別人的掃瞄機上肯定沒有這個字,那會掃出什麼東西?
是只有這個字變亂碼,或整串結果都亂了套,毫無用處了? |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
ericklin
註冊時間: 2007-11-14 文章: 107 來自: 台中市
第 5 樓
|
發表於: 星期日 六月 23, 2013 10:33 pm 文章主題: |
|
|
小弟訒為
unicode 轉 big5的系統當然會有可能亂碼
若本身系統就可以接受 unicode 就不會
也跟編碼無關,編碼只是要 code 轉 01010101 黑點點 |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
spfrk
註冊時間: 2004-11-08 文章: 161
第 6 樓
|
發表於: 星期一 六月 24, 2013 9:31 am 文章主題: |
|
|
QR CODE 所存的內容就是所輸入的原始資料,解碼後就是原始的資料,這與
內碼無關 |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
foxy
![](images/avatars/10772004616572eab42091c.png)
註冊時間: 2007-08-16 文章: 231 來自: 泰國
第 7 樓
|
發表於: 星期五 六月 28, 2013 1:47 pm 文章主題: |
|
|
謝謝分享
小弟我用您的辦法從Canon印出二維條碼, 可以從手機 Android的SCAN讀出資料,但是Honeywell barcode scanner卻讀不出資料, 沒有反應, 雖然QR code已經設定可用. 不知道是什麼原因. 請指教.謝謝
現在可以讀出了,需要enable QR code. _________________ 進銷存+生產製造+會計+員工薪資+CRM+POS零售+餐廳手機app+電商手機app+電商網站,物流系統. 正/簡體中文,英,日,泰,緬甸文. MS SQL Server + 前台 VFP + PHP 網站 + Flutter 手機 App, 都共享 MS SQL Server的資料. www.foxacc.com LINE: mike-lm |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
spfrk
註冊時間: 2004-11-08 文章: 161
第 8 樓
|
發表於: 星期六 六月 29, 2013 11:28 pm 文章主題: |
|
|
因為 QRCODE 裡面所記載的是原始的資料, 如果是 BIG5 碼的話,有些 APP
不會判斷所在地國的內碼,一律用UTF-8來判讀,當然就是亂碼一堆,使用
QUICK MARK 就不會,因為它會自動判斷. |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
ckp6250
註冊時間: 2004-07-30 文章: 1644
第 9 樓
|
發表於: 星期日 六月 30, 2013 10:00 pm 文章主題: |
|
|
spfrk 寫到: | 因為 QRCODE 裡面所記載的是原始的資料, 如果是 BIG5 碼的話,有些 APP
不會判斷所在地國的內碼,一律用UTF-8來判讀,當然就是亂碼一堆,使用
QUICK MARK 就不會,因為它會自動判斷. |
如您所說,那麼在 VFP 底下運用時,
是否宜把該內容先轉成 utf-8之後,再轉成 QRCODE 較為妥當? |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
spfrk
註冊時間: 2004-11-08 文章: 161
第 10 樓
|
發表於: 星期日 六月 30, 2013 11:03 pm 文章主題: |
|
|
這對 qrcode 沒有差別, encode 只是很忠實的記錄資料內容,端看解碼器的能力,
Quick Mark 這個 APP 連簡體字( GB碼) 都能辨識. |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
spfrk
註冊時間: 2004-11-08 文章: 161
第 11 樓
|
發表於: 星期日 六月 30, 2013 11:20 pm 文章主題: |
|
|
這是(103)明年1月1日要實施的紙本電子發票的格式,雖然還會修改,但大致是這樣,主要多了一個 QRCODE,作為儲放銷貨明細,大概只能到8項. |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
黃澤民
註冊時間: 2003-09-08 文章: 65 來自: 新竹
第 12 樓
|
發表於: 星期一 七月 01, 2013 10:26 am 文章主題: |
|
|
謝謝提供,收藏。 |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
ckp6250
註冊時間: 2004-07-30 文章: 1644
第 13 樓
|
發表於: 星期一 七月 01, 2013 6:40 pm 文章主題: |
|
|
恕小弟愚昧,再請教一下
如所附發票圖檔,既然已有正四方形之QRCODE
又為何還要有長條形的條碼?
這二者的區別在那兒?
一定要二者並列嗎?不能只秀其一? |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
spfrk
註冊時間: 2004-11-08 文章: 161
第 14 樓
|
發表於: 星期二 七月 02, 2013 10:23 am 文章主題: |
|
|
那是備用的,因為 CODE39碼 很簡單就能讀取.
其內容為 期別碼(5碼),統一發票號碼(10碼),隨機碼, 共19碼
再外加2個 CODE39 特有的 '*' |
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
spfrk
註冊時間: 2004-11-08 文章: 161
第 15 樓
|
|
回頂端 |
|
![](templates/subSilver/images/spacer.gif) |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|