此文章主要介紹當遇到一串條碼文字時,該如何進行長度最佳化以及特殊控制碼的應用。
同樣記得搭配此份表格服用。
上一篇文章中提到,當條碼唯一連串數字時,可以使用 Set C 進行條碼長度優化,而範例採用 20170226 作為範例進行初步的反向說明。
那麼這次就採用正向的方式來進行說明,假設這次的文字為:94870214
※ Step 1:使用 Start C ( value : 105 , Character : Í)
※ Step 2:將文字依序兩兩一組分開: 94、87、02、14
※ Step 3:查詢對照表文字
第一組為 94,查到 Set C 為 "94" 所對應的 Character 是「~」
第一組為 87,查到 Set C 為 "87" 所對應的 Character 是「w」
第一組為 02,查到 Set C 為 "02" 所對應的 Character 是「"」
第一組為 14,查到 Set C 為 "14" 所對應的 Character 是「.」
因此到目前的文字為: Í~w".
※ Step 4:計算驗證碼,計算結果不再贅述,這邊算出來是「7」( value 23 )
最後再加上結尾 Stop , 完整的文字就是 Í~w".7Î
BUT...
但現在問題來了,以上的例子都是偶數個字元, Set C 骰採用的是「連續兩個字元」,那麼如果遇到奇數個字元的話,該怎麼辦? 例如:「54321」
這時候就必須使用內容中轉碼的功能,參考表格 value 在 99~101 的位置,可以看到有 "Code A"、"Code B"、"Code C",這些代表「從這裡開始轉為使用 Set A/B/C」。
所以在這個「54321」的例子中,我們必須用這種方式表示:
PS : 底下文字的顏色,代表要參考哪個 Set (請看表格)
1:「Start C」「54」「32」「Code A」「1」「驗證」「Stop」或
2:「Start A」「5」「Code C」「43」「21」「驗證」「Stop」
轉成字碼的話就是 1:「ÍV@É1oÎ」 或 2:「Ë5ÇK54Î」。
注意,方法 2 的「Ë5ÇK54Î」,字碼中有兩個 "5",但前後意義不同:
第一個 5 ,由於此為 Start A (Ë) 開頭,這裡要對照 Set A ,代表文字為 "5";
第二個 5 ,由於前方有設定 Code C (Ç),這裡要對照 Set C ,代表文字為 "21";
這就是中途轉碼的方式,也因為這個特性,所以並非只要遇到連續數字都可以轉為 Code C,必須在特定條件下才適合壓縮,底下舉例。
假設現在要建立「a123b」的條碼:
由於文字有小寫,必須要用 Set B,
先看不轉碼一慮使用 Set B:「Ìa123bMÎ」,共 8 碼;
中間轉 Set C:「ÌaÇ,È3bÄÎ」,共 9 碼,不減反增
其原因為若要轉碼,則勢必要多出一個轉碼字元;且如果後方還要再轉回來,則又會再多一個轉碼字元,如上面例子中的「Ç ( Code C )」和「È ( Code B )」,所以原本因為使用 Code C 減少的一個字元碼,反而因為轉來轉去多出的兩個字元碼給抵消甚至超過了。
根據這個特性,可以歸納出底下四個狀況,在這四種狀況下使用 Set C 才不會在轉換後,長度不減反增:
- 整個字串只有連續兩個數字或連續四個以上的數字。(只有連續三個不行)
- 字串開頭為連續四個以上的數字
- 字串結尾為連續四個以上的數字
- 字串中間為連續六個以上的數字,且前後為其他 Set 的文字時
- 「99」符合狀況 1
- 「90975321」符合狀況 1
- 「1234AB」符合狀況 2
- 「123456A23」符合狀況2
- 「88abcd4321」符合狀況3
- 「AB12345678C」符合狀況4
- 「ab12345XD」時,中間不轉碼 (四個狀況皆不符合)
沒有留言:
張貼留言