專利名稱:對(duì)條形碼譯碼的方法和條形碼讀出器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種對(duì)條形碼進(jìn)行譯碼的方法和條形碼讀出器。
許多商店和超級(jí)市場采用包括條形碼讀出器的POS(銷售點(diǎn))系統(tǒng)。條形碼讀出器必須讀取印刷質(zhì)量并非總是良好的條形碼。由于差的印刷質(zhì)量,條形碼的某些條比標(biāo)準(zhǔn)寬度粗或者細(xì),質(zhì)地不勻或部分?jǐn)嗑€。條形碼讀出器需要正確讀出如此低質(zhì)的條形碼。
UPC條形碼由開始保護(hù)條、中間條和結(jié)束保護(hù)條組成。中間條將條形碼分為兩部分。在開始保護(hù)條與中間條之間的部分是左塊,在中間條與結(jié)束保護(hù)條之間的部分是右塊。左塊和右塊中的每一個(gè)都由六個(gè)字符組成,因此每個(gè)條形碼含有12個(gè)字符。條形碼讀出器的光敏元件響應(yīng)于從條形碼的黑條反射的光提供代表“1”的電信號(hào),響應(yīng)于從條形碼的白條反射的光提供代表“0”的電信號(hào)。
條形碼的每個(gè)字符由兩個(gè)白條和兩個(gè)黑條組成,每個(gè)字符延伸七個(gè)基本單位(module)。每個(gè)基本單位是用于表達(dá)條形碼每條寬度的的單位。每個(gè)白條或黑條的寬度是整數(shù)個(gè)基本單位。
條形碼的每個(gè)字符根據(jù)字符的白條和黑條的寬度代表數(shù)字0至9中的一個(gè)。因?yàn)槊總€(gè)字符由七個(gè)基本單位組成,所以將字符分為兩組。在一組中,每個(gè)字符的兩個(gè)黑條的基本單位的總數(shù)是偶數(shù)的,在另一組中,是奇數(shù)的。于是,每個(gè)UPC條形碼能夠表達(dá)20個(gè)字符,即偶-0(E0)至偶-9(E9),每個(gè)包括偶數(shù)個(gè)黑基本單位,和奇-0(O0)至奇-9(O9),每個(gè)包括奇數(shù)個(gè)黑基本單位,如圖3所示。兩個(gè)字符組例如用于相互區(qū)分條形碼的左塊和右塊。
條形碼讀出器向條形碼發(fā)送掃描光束,并接收從條形碼反射的光束。條形碼讀出器對(duì)反射光束的強(qiáng)度與參考值進(jìn)行比較,并提供代表1或0的電信號(hào)。條形碼讀出器的譯碼器根據(jù)電信號(hào)的電平(1或0)和持續(xù)時(shí)間將電信號(hào)譯碼為E0至E9和O0至O9中的一個(gè)。
條形碼的每條取決于印刷條件經(jīng)常太細(xì)或太粗。條形碼讀出器不能檢測印刷條件,因此,如果條形碼讀出器直接讀條形碼每條的寬度則可能錯(cuò)誤地讀出劣質(zhì)印刷的條形碼。
為解決這個(gè)問題,有一種條形碼譯碼方法,它消除了當(dāng)讀出條形碼時(shí)過粗或過細(xì)條的影響。該方法測量條形碼的相鄰兩對(duì)黑條和白條的的寬度T1和T2,如圖2所示。寬度T1和T2稱為Δ距離。在條形碼中能夠表達(dá)從E0至E9以及O0至O9的20個(gè)字符。另一方面,從兩個(gè)到五個(gè)基本單位有四個(gè)Δ距離,以提供T1和T2的16種組合。因此,E1至E7提供T1和T2的相同組合。類似地,E2至E8、O1至O7和O2至O8分別提供T1和T2的相同組合。對(duì)于這些字符,Δ距離T1和T2不足以使其相互區(qū)分。
然而,具有T1和T2相同組合的字符在各個(gè)條中具有不同數(shù)量的基本單位。因此,可以通過測量各對(duì)中的條來相互區(qū)別對(duì)E1和E7、對(duì)E2和E8、對(duì)O1和O7以及對(duì)O2和O8中任何一個(gè)的成員。
這里產(chǎn)生另一個(gè)問題,即各對(duì)中的每條也取決于印刷條件或粗或細(xì)。
于是,測量條的寬度不足以區(qū)分字符,例如具有具有相同Δ距離T1和T2的E1和E7。
這解決這個(gè)問題,有一種根據(jù)已經(jīng)譯碼的字符的條寬度對(duì)將被譯碼的字符的條寬度進(jìn)行校正的方法。
有另外一種方法,它設(shè)置條寬度的允許誤差范圍,確定每條是否位于該范圍之內(nèi),并且僅當(dāng)條位于該范圍之內(nèi)時(shí),才對(duì)條形碼進(jìn)行譯碼。
如果每條具有大的誤差,則擴(kuò)大允許誤差范圍,以根據(jù)情況適當(dāng)?shù)貙?duì)條形碼進(jìn)行譯碼。
然而,這種方法是復(fù)雜的,不是最佳的。無法確定校正后的條寬度是否是正確的。如果校正后的條寬度是錯(cuò)誤的,則條形碼讀出器將提供錯(cuò)誤的結(jié)果。
最近的條形碼是緊湊、短小和簡單印刷的,要求條形碼讀出器正確地讀出這些條形碼。
本發(fā)明的一個(gè)目的是提供對(duì)條形碼進(jìn)行譯碼的方法和能夠正確讀出需要寬度校正的條形碼的條形碼讀出器。
這實(shí)現(xiàn)上述目的,本發(fā)明提供一種根據(jù)從條形碼反射的光對(duì)條形碼進(jìn)行譯碼的方法,包括步驟有檢測反射光中的條形碼數(shù)據(jù),將條形碼數(shù)據(jù)存儲(chǔ)在存儲(chǔ)單元中,在第一方向上讀出條形碼數(shù)據(jù)并譯碼,在第二方向上讀出條形碼數(shù)據(jù)并譯碼,以及確定在第一方向和在第二方向上的譯碼結(jié)果是否彼此相同。
本發(fā)明還提供一種根據(jù)從條形碼反射的光對(duì)條形碼進(jìn)行譯碼的方法,包括步驟有檢測反射光中的條形碼數(shù)據(jù),將條形碼數(shù)據(jù)存儲(chǔ)在存儲(chǔ)單元中,在第一方向上讀出條形碼數(shù)據(jù)并譯碼,如果第一方向上的譯碼結(jié)果包括特殊數(shù)據(jù)則在第二方向上讀出條形碼數(shù)據(jù)并譯碼,以及確定在第一方向和在第二方向上的譯碼結(jié)果是否彼此相同。該特殊數(shù)據(jù)涉及在第一方向和第二方向的每個(gè)方向上在對(duì)字符進(jìn)行譯碼之前根據(jù)在每個(gè)方向上已經(jīng)譯碼的字符的條寬度其條寬度被校正的字符。
對(duì)兩個(gè)方向上的校正條寬度或譯碼結(jié)果相互比較,以確定它們是否彼此相同。如果它們彼此相同,則正確接受它們。如果它們互不相同,則它們之中的至少一個(gè)是錯(cuò)誤的。
本發(fā)明還提供一種根據(jù)從條形碼反射的光對(duì)條形碼進(jìn)行譯碼的方法,包括步驟有檢測反射光中的條形碼數(shù)據(jù),將條形碼數(shù)據(jù)存儲(chǔ)在存儲(chǔ)單元中,在第一方向上讀出條形碼數(shù)據(jù)并譯碼,如果第一方向上的譯碼結(jié)果包括連續(xù)特殊數(shù)據(jù)則在第二方向上讀出條形碼數(shù)據(jù)并譯碼,以及確定在第一方向和在第二方向上的譯碼結(jié)果是否彼此相同。
該特殊數(shù)據(jù)涉及在第一方向和第二方向的每個(gè)方向上在對(duì)字符進(jìn)行譯碼之前根據(jù)在每個(gè)方向上已經(jīng)譯碼的字符的條寬度其條寬度被校正的字符。
本發(fā)明還提供一種根據(jù)從條形碼反射的光對(duì)條形碼進(jìn)行譯碼的方法,包括步驟有檢測反射光中的條形碼的條寬度數(shù)據(jù),將條寬度數(shù)據(jù)存儲(chǔ)在存儲(chǔ)單元中,在第一方向上讀出條寬度數(shù)據(jù)并將其譯碼為第一字符,并且確定在第一字符之前剛剛譯碼的第二字符的條寬度是否已經(jīng)根據(jù)在第二字符之前剛剛譯碼的第三字符的條寬度被校正。如果第二字符的條寬度已經(jīng)根據(jù)第三字符的條寬度被校正,則該方法根據(jù)第一字符的條寬度校正第二字符的條寬度,再次對(duì)第二字符進(jìn)行譯碼,并且確定第二字符的兩個(gè)譯碼結(jié)果是否彼此相同。
通過以下參照附圖的描述,將更清楚地理解本發(fā)明。
圖1示出UPC條形碼的一個(gè)例子;圖2示出UPC條形碼的一個(gè)字符的例子;圖3示出UPC條形碼的字符O0至O9以及E0至E9;圖4示出正常條形碼、加粗條形碼和減細(xì)條形碼;圖5是示出Δ距離和相應(yīng)字符的表;圖6是用于對(duì)UPC條形碼的字符1、2、7和8進(jìn)行譯碼的表;圖7示出條寬度校正;圖8示出條形碼讀出器的一個(gè)例子;圖9是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的條形碼讀出器的框圖;圖10示出條形碼的譯碼方向;圖11是示出根據(jù)本發(fā)明第一個(gè)實(shí)施方式的條形碼譯碼程序的流程圖;圖12是示出根據(jù)本發(fā)明第二個(gè)實(shí)施方式的條形碼譯碼程序的流程圖;圖13示出兩個(gè)字符之間所夾的字符;圖14是示出根據(jù)本發(fā)明第三個(gè)實(shí)施方式的條形碼譯碼程序的流程圖;圖15是示出根據(jù)本發(fā)明第四個(gè)實(shí)施方式的條形碼譯碼程序的流程圖;圖16是示出根據(jù)本發(fā)明第五個(gè)實(shí)施方式的條形碼譯碼程序的流程圖。
為了更好地理解本發(fā)明的最佳實(shí)施方式,下面解釋現(xiàn)有技術(shù)中存在的問題。
圖1示出UPC條形碼的一個(gè)例子。條形碼具有開始保護(hù)條53、結(jié)束保護(hù)條54和中間條55。
在開始保護(hù)條53與中間條55之間的部分是左塊;在中間條55與結(jié)束保護(hù)條54之間的部分是右塊。
左塊和右塊中的每一個(gè)都由六個(gè)字符組成,因此每個(gè)條形碼含有12個(gè)字符。
圖2示出UPC條形碼的一個(gè)字符的例子。條形碼讀出器的光敏元件響應(yīng)于從條形碼的黑條反射的光提供代表“1”的電信號(hào),響應(yīng)于從條形碼的白條反射的光提供代表“0”的電信號(hào)。
條形碼的每個(gè)字符由兩個(gè)白條和兩個(gè)黑條組成,每個(gè)字符的寬度是七個(gè)基本單位(module)?;締挝皇怯糜诒磉_(dá)條形碼每條寬度的的單位。每個(gè)白條或黑條的寬度是整數(shù)個(gè)基本單位。
開始保護(hù)條53包括兩個(gè)黑條和夾在兩個(gè)黑條之間的一個(gè)白條,每個(gè)條的寬度為一個(gè)基本單位。結(jié)束保護(hù)條54具有相同的結(jié)構(gòu)。中間條55由三個(gè)白條和兩個(gè)黑條組成,每條的寬度為一個(gè)基本單位。這些條以白、黑、白、黑和白的次序排列。
條形碼的每個(gè)字符根據(jù)字符的白條和黑條的寬度代表數(shù)字0至9中的任何一個(gè)。因?yàn)槊總€(gè)字符由七個(gè)基本單位組成,所以將字符分為兩組。在一組中,每個(gè)字符的兩個(gè)黑條的基本單位的總數(shù)是偶數(shù)的,在另一組中,是奇數(shù)的。于是,一個(gè)UPC條形碼能夠表達(dá)20個(gè)字符,即偶-0(E0)至偶-9(E9),每個(gè)包括偶數(shù)個(gè)黑基本單位,和奇-0(O0)至奇-9(O9),每個(gè)包括奇數(shù)個(gè)黑基本單位,如圖3所示。兩個(gè)字符組例如用于相互區(qū)分條形碼的左塊和右塊。
在圖3中,右部分示出E0至E9,左部分示出O0至O9。這些數(shù)字的每一個(gè)的每一條由特定數(shù)的基本單位組成。
條形碼讀出器向條形碼發(fā)送掃描光束,并接收從條形碼反射的光束。條形碼讀出器對(duì)反射光束的強(qiáng)度與參考值進(jìn)行比較,并提供代表1或0(圖2)的電信號(hào)。條形碼讀出器的譯碼器根據(jù)電信號(hào)的電平(1或0)和持續(xù)時(shí)間將電信號(hào)譯碼為E0至E9和O0至O9中的一個(gè)。
給定條形碼的圖3的E0至E9以及O0至O9中的任何一個(gè)根據(jù)從條形碼反射的光是可區(qū)分的,因?yàn)槊總€(gè)字符具有黑條和白條的不同結(jié)構(gòu)。于是,條形碼中的每個(gè)字符得以譯碼。
通常條形碼中的條取決于印刷條件減細(xì)或加粗,如圖4所示。圖4示出兩個(gè)白條和一個(gè)黑條,每條由相同數(shù)目的基本單位組成。在圖4(1)中,條是正常印刷的。在圖4(2)中,黑條粗。在圖4(3)中,黑條細(xì)。
在圖4(1)中,白條B1和B3以及黑條B2是以正常寬度正確印刷的,因此,條形碼讀出器將正確地讀出這些條。
在圖4(2)中,黑條B2比正常寬度粗了“P0×2”。因此,每個(gè)白條B1和B2比正常寬度細(xì)相同的部分。在圖4(3)中,黑條B2比正常寬度細(xì)了“P1×2”,每個(gè)白條B1和B2比正常寬度粗相同的部分。
條形碼讀出器不能檢測印刷條件,因此,如果條形碼讀出器直接讀取條形碼每條的寬度,則可能不能正確地讀取具有圖4(2)和圖4(3)的未正確印刷的條的條形碼。
下面參照?qǐng)D4解釋用于正確讀取具有減細(xì)的或加粗的條的條形碼的現(xiàn)有技術(shù)。
Δ距離T1是黑條B2與白條B1的總寬度,Δ距離T2是白條B3與黑條B2的總寬度。
現(xiàn)在參照?qǐng)D4(2)解釋具有加粗黑條的條形碼的讀取。如果每條均勻地具有印刷誤差,與白條B1相鄰的黑條的粗部分P01大約等于黑條B2左側(cè)的粗部分P03,因此,P01和P03相互取消。于是,Δ距離T1大約等于正常黑條B2與正常白條B1的總和。黑條B2的粗部分P02永遠(yuǎn)不會(huì)影響Δ距離T1。即,Δ距離T1實(shí)質(zhì)上與粗部分無關(guān)。
類似地,Δ距離T2大約等于正常黑條B2與正常白條B3的總和,因?yàn)榇植糠諴02和P04相互取消。
在圖4(3)中,在Δ距離T1中的細(xì)部分P11和P13相互取消,在Δ距離T2中的細(xì)部分P12和P14相互取消。于是,Δ距離T1和T2與細(xì)部分無關(guān)。即,在圖4的(1)、(2)和(3)情況下Δ距離T1和T2實(shí)質(zhì)上不變?,F(xiàn)有技術(shù)使用這種Δ距離對(duì)給定條形碼進(jìn)行譯碼。
圖3示出UPC條形碼的20個(gè)字符每個(gè)的Δ距離。每個(gè)字符由七個(gè)基本單位組成,每條的寬度是至少一個(gè)基本單位。這意味看每個(gè)Δ距離在2至5個(gè)基本單位的范圍內(nèi)。圖5是示出20個(gè)字符即E0至E9以及O0至O9中每個(gè)的Δ距離T1和T2的表。為了對(duì)條形碼譯碼,測量條形碼每個(gè)字符的Δ距離T1和T2,并且根據(jù)圖5的表對(duì)字符進(jìn)行譯碼。
如上所述,條形碼能夠表述E0至E9以及O0至O9這20個(gè)字符。另一方面,有四個(gè)Δ距離,在2至5個(gè)基本單位的范圍內(nèi),提供T1和T2的16種組合。因此,字符E1和E7具有相同的T1和T2組合。類似地,E2和E8、O1和O7以及O2和O8分別具有相同的T1和T2組合。于是,Δ距離T1和T2不足以相互區(qū)分這些對(duì)中每一對(duì)中的兩個(gè)字符。
然而,具有相同T1和T2組合的字符在各條中具有不同的基本單位。于是,通過測量對(duì)中的一條,能夠相互區(qū)分任何一對(duì)E1和E7、E2和E8、O1和O7以及O2和O8中的字符。
圖6示出用于標(biāo)識(shí)這些對(duì)中每個(gè)字符的表。例如,具有都為3的相同Δ距離T1和T2的字符E2和E8根據(jù)圖6的表得以相互區(qū)分。
如果所檢測的Δ距離T1和T2都為3,則相應(yīng)字符必然是E2或E8。于是,測量兩個(gè)黑條B1和B3(圖2)的寬度,并且參照?qǐng)D6的表,選擇E2和E8中的一個(gè)。
如果字符是E2,則每個(gè)黑條B1和B3具有兩個(gè)基本單位。如果是E8,則每個(gè)黑條B1和B3具有一個(gè)基本單位。以這種方式,能夠標(biāo)識(shí)具有相同Δ距離T1和T2的兩個(gè)字符中的任何一個(gè)。
然而,這種方法有問題。
為了相互區(qū)分具有相同Δ距離的兩個(gè)字符,需要測量特定條的寬度,即基本單位數(shù)。這些條取決于印刷條件自然被減細(xì)或加粗。例如,字符E2具有兩個(gè)黑條,每條具兩個(gè)基本單位的寬度。如果這些黑條由于差的印刷條件被減細(xì)一個(gè)基本單位,則條形碼讀出器可能將該字符讀為E8。
以這種方式,當(dāng)相互區(qū)分具有相同Δ距離的兩個(gè)字符時(shí),不能夠消除印刷誤差的影響。
為解決這個(gè)問題,另一方法根據(jù)已被譯碼的先前字符的條寬度校正給定字符的每條的寬度,然后對(duì)給定字符譯碼。
圖7說明了這種方法。
E0的字符位于E2的字符前而,并已譯碼。為了譯碼E2,必須測量E2的黑條B3和B1。這些黑條可能有印刷誤差。因?yàn)镋0已被譯碼,所以知道E0的黑條和白條的基本單位數(shù)目。
為了校正E2的黑條B3的寬度,從黑條B3的寬度中減去E0的黑條B5或B7的寬度。黑條B5或B7的寬度是已知的,并有印刷誤差。于是,從黑條B3的寬度中減去黑條B5或B7的寬度消除了黑條B3中的印刷誤差。如果從黑條B3中減去黑條B5,則差將為“0”,因?yàn)閮蓷l的寬度都為一個(gè)基本單位。如果從黑條B3中減去黑條B7,則差將為“-1”。
之后,將差加到E0的B5或B7的正?;締挝粩?shù)目上。正?;締挝粩?shù)沒有印刷誤差。以這種方式,正確地測量黑條B3的寬度。類似地,正確測量字符E2的黑條B1的寬度。
對(duì)具有校正條寬度的字符E2進(jìn)行正確譯碼,而不考慮印刷誤差。
然而,不能確定在字符E2之前的字符是否確實(shí)是E0,或者黑條B5或B7的基本單位數(shù)是否正確。該方法假設(shè)在E2之前譯碼的字符E0是正確的然后對(duì)字符E2譯碼。如果這種假設(shè)由于斷條等是錯(cuò)誤的,則不能正確譯碼字符E2。沒有方法測試所譯碼的字符E0是否正確,或者是否已經(jīng)真正校正了字符E2的條。
如果條形碼印刷在曲面上,則字符E0對(duì)字符E2的比率將不是1∶1。于是,根據(jù)字符E0的條寬度校正字符E2的條寬度將提供錯(cuò)誤的結(jié)果。
為解決這個(gè)問題,有一種方法,它為條寬度設(shè)置允許的誤差范圍,確定每條是否位于該范圍內(nèi),并且僅當(dāng)條位于范圍之內(nèi)時(shí),才對(duì)相應(yīng)條形碼進(jìn)行譯碼。
如果每條具有大的誤差,則擴(kuò)大允許的誤差范圍,以根據(jù)情況對(duì)條形碼進(jìn)行適當(dāng)?shù)刈g碼。
然而,這種方法是復(fù)雜的,非最佳的。
另外,這種方法不能確定給定條寬度是否是準(zhǔn)確的。如果是錯(cuò)誤的,則條形碼讀出器將提供錯(cuò)誤的結(jié)果。
最近的條形碼是緊湊、短小和簡單印刷的,要求條形碼讀出器正確地讀出這些條形碼。
下面,解釋本發(fā)明的最佳實(shí)施方式。
圖8示出一種條形碼讀出器的例子。這是固定在例如商店收款臺(tái)上的靜止型的。
該條形碼讀出器具有一個(gè)在不同向下方向上發(fā)射激光束的窗口1。
圖9是示出根據(jù)本發(fā)明一種實(shí)施方式的條形碼讀出器的信號(hào)處理系統(tǒng)的框圖。光系統(tǒng)11包括一個(gè)諸如半導(dǎo)體激光器的光源,用于從光源反射光束的鏡子,用于根據(jù)反射光束提供掃描光束的多角鏡,用于發(fā)射掃描光束的窗口,以及用于接收從條形碼反射的光束的光敏元件。該光敏元件提供代表與條形碼的黑條或白條相應(yīng)的值的模擬電信號(hào)。
A/D轉(zhuǎn)換器12將該模擬電信號(hào)轉(zhuǎn)換為代表值1或0的數(shù)字電信號(hào)。寬度計(jì)數(shù)器13根據(jù)由時(shí)鐘發(fā)生器14提供的時(shí)鐘信號(hào)對(duì)A/D轉(zhuǎn)換器12的輸出的邊緣之間的時(shí)間進(jìn)行計(jì)數(shù)。也就是說,寬度計(jì)數(shù)器13測量條形碼的黑條或白條的寬度。
存儲(chǔ)器15存儲(chǔ)寬度計(jì)數(shù)器13的輸出。當(dāng)完成掃描操作時(shí),CPU 16從存儲(chǔ)器15讀出條寬度,并且譯碼器17將條寬度譯碼為條形碼字符。
定向單元18確定讀出和譯碼存儲(chǔ)器15中的寬度數(shù)據(jù)的方向。
圖10示出一個(gè)條形碼和條形碼譯碼方向。根據(jù)本實(shí)施方式的條形碼讀出器首先在方向(1)上對(duì)條形碼譯碼,并且如果必要,也在方向(2)上對(duì)條形譯碼。即,首先在方向(1)上讀出存儲(chǔ)在存儲(chǔ)器15中的條形碼數(shù)據(jù),并且在相同方向上譯碼,然后在方向(2)上讀出相同的條形碼數(shù)據(jù),并且在相同方向上譯碼。定向單元18確定方向(1)和(2)之一。
圖11是示出根據(jù)本發(fā)明第一實(shí)施方式的條形碼譯碼程序的流程圖。該程序是在條形碼讀出器讀出條形碼并且存儲(chǔ)器15存儲(chǔ)條寬度數(shù)據(jù)之后執(zhí)行的。步驟S101在第一方向上從存儲(chǔ)器15讀出條寬度數(shù)據(jù),并且逐字符地對(duì)數(shù)據(jù)進(jìn)行譯碼。步驟S102在第一方向上存儲(chǔ)譯碼結(jié)果(a)。
步驟S103在第二方向上逐字符地讀并且對(duì)條寬度數(shù)據(jù)進(jìn)行譯碼。從一個(gè)譯碼方向改變到另一個(gè)譯碼方向是由定向單元18控制的。在第一方向上最后譯碼的字符是在第二方向上首先譯碼的字符。
步驟S104在第二方向上存儲(chǔ)譯碼結(jié)果(b)。步驟S105對(duì)譯碼結(jié)果(a)和(b)進(jìn)行相互比較。如果正確讀出條形碼,則譯碼結(jié)果(a)和(b)必須彼此相同。如果結(jié)果(a)和(b)彼此一致,則步驟S106確定已經(jīng)正確譯碼條形碼。如果結(jié)果(a)和(b)不彼此相同,則步驟S107放棄譯碼結(jié)果。
以這種方式,第一實(shí)施方式在兩個(gè)方向上對(duì)條形碼進(jìn)行譯碼,并且根據(jù)兩個(gè)方向上的譯碼結(jié)果確定是否已經(jīng)成功地對(duì)條形碼進(jìn)行譯碼。這使得條形碼譯碼可靠性高于現(xiàn)有技術(shù)。
圖12是示出根據(jù)本發(fā)明第二實(shí)施方式的條形碼譯碼程序的流程圖。該實(shí)施方式根據(jù)條形碼是否包括字符E1、E2、E7、E8、O1、O2、O7和O8中的任何一個(gè)在一個(gè)方向或兩個(gè)方向上對(duì)條形碼進(jìn)行譯碼。下文中將這些字符稱為特殊字符。
特殊字符中的任何一個(gè)必須根據(jù)其條的實(shí)際寬度進(jìn)行譯碼。為了提高譯碼結(jié)果的可靠性,必須根據(jù)已經(jīng)譯碼的先前字符的條寬度校正這些字符的條寬度。
另一方面,可以根據(jù)Δ距離對(duì)除特殊字符之外的正常字符進(jìn)行譯碼,而不考慮印刷誤差。也就是說,正常字符不需要條寬度校正。
如果譯碼的先前字符是正確的,則條寬度校正將是正確的。如果譯碼的先前字符是錯(cuò)誤的,則條寬度校正將是錯(cuò)誤的,因此,譯碼結(jié)果將是錯(cuò)誤的。
圖12的實(shí)施方式解決了這個(gè)問題。
步驟S201在第一方向上對(duì)給定條形碼進(jìn)行譯碼。步驟S202存儲(chǔ)譯碼結(jié)果(a)。這些步驟與第一實(shí)施方式中的相同。步驟S203確定譯碼結(jié)果(a)中是否包括特殊字符E1、E2、E7、E8、O1、O2、O7和O8中的任何一個(gè)。如果一個(gè)都不包括,則步驟S207確定譯碼結(jié)果(a)是正確的和可接受的。
如果譯碼結(jié)果(a)包括特殊字符中的任何一個(gè),則字符的條寬度將根據(jù)譯碼的先前字符的條寬度已被校正,因此,必須驗(yàn)證條寬度校正。為此,步驟S204在第二方向上對(duì)條形碼數(shù)據(jù)進(jìn)行譯碼,并且步驟S205在第二方向上存儲(chǔ)譯碼結(jié)果(b)。
圖13示出夾在字符B和C之間的字符A。字符A是O1,即特殊字符之一,因此,必須根據(jù)先前譯碼的字符的條寬度其條寬度被校正。
當(dāng)在圖13中在第一方向上對(duì)條形碼進(jìn)行譯碼時(shí),字符A在字符B之后得到譯碼。于是,字符A的黑條的寬度根據(jù)字符B的黑條b的寬度得到校正。
當(dāng)在第二方向上對(duì)條形碼進(jìn)行譯碼時(shí),字符A在字符C之后得到譯碼。于是,字符A的黑條的寬度根據(jù)字符C的黑條c的寬度得到校正。
在圖13中,為了校正字符A的黑條的寬度用作參考的黑條是字符B和C的每個(gè)的右黑條。
以這種方式,字符A的黑條寬度根據(jù)字符B和C的黑條寬度被校正兩次。之后,在兩次校正基礎(chǔ)上的譯碼結(jié)果相互比較。如果比較沒有差別,則確定條形碼已被成功譯碼,或者條寬度校正是正確的。
回到圖12,如果步驟S203確定譯碼結(jié)果(a)包括特殊字符中的任何一個(gè),則步驟S204在第二方向上對(duì)條形碼數(shù)據(jù)進(jìn)行譯碼。步驟S205在第二方向上存儲(chǔ)譯碼結(jié)果(b)。步驟S206對(duì)譯碼結(jié)果(a)和(b)進(jìn)行相互比較。
如果譯碼結(jié)果(a)和(b)彼此相同,則步驟S207確定已成功地對(duì)條形碼進(jìn)行譯碼。如果相互不一致,則步驟S208放棄譯碼結(jié)果,因?yàn)閮蓚€(gè)結(jié)果中的至少一個(gè)必然是錯(cuò)誤的。
以這種方式,如果條形碼含有任何需要條寬度校正的字符,則第二實(shí)施方式在不同方向上對(duì)條形碼進(jìn)行譯碼,對(duì)不同方向上的譯碼結(jié)果進(jìn)行相互比較,并且確定是否已經(jīng)正確地對(duì)條形碼進(jìn)行譯碼。
如果條形碼不含有這種特殊字符中的任何一個(gè),則第二初稿方式只在一個(gè)方向上對(duì)條形碼進(jìn)行譯碼,以縮短譯碼時(shí)間。
第二實(shí)施方式對(duì)圖13的字符A的黑條寬度根據(jù)與字符A相鄰的字符B和C的條寬度進(jìn)行校正。這避免了加有條形碼的表面的曲率的影響。然而,這并不限制本發(fā)明。條寬度校正可以根據(jù)例如第一個(gè)譯碼字符或保護(hù)條來進(jìn)行。
圖14是示出根據(jù)本發(fā)明第三實(shí)施方式的條形碼譯碼程序的流程圖。如果條形碼連續(xù)含有特殊字符E1、E2、E7、E8、O1、O2、O7和O8中的任何一個(gè),則該實(shí)施方式在第一和第二方向上對(duì)給定條形碼進(jìn)行譯碼。
第三字符的條寬度根據(jù)在第三字符之前的第二字符的條寬度得到校正。第二字符的條寬度根據(jù)在第二字符之前的第一字符的條寬度得到校正。如果第二字符的條寬度校正含有誤差,則該誤差將擴(kuò)展到第三字符的校正中。于是,第三字符將具有更大的誤差。
如果條形碼連續(xù)地含有其條寬度已被校正的幾個(gè)特殊字符,則第三實(shí)施方式除了在第一方向之外在第二方向上對(duì)給定條形碼進(jìn)行譯碼。在這種情形下,第三實(shí)施方式根據(jù)兩個(gè)不同的字符的條寬度對(duì)一個(gè)給定特殊字符的條寬度進(jìn)行校正,以提高條寬度校正和條形碼譯碼的可靠性。
步驟S301在第一方向上對(duì)條形碼進(jìn)行譯碼,步驟S302存儲(chǔ)譯碼結(jié)果(a)。步驟S303確定譯碼結(jié)果(a)是否連續(xù)含有特殊字符E1、E2、E7、E8、O1、O2、O7和O8中的任何一個(gè)。如果連續(xù)地含有它們,則步驟S304在第二方向上對(duì)條形碼數(shù)據(jù)進(jìn)行譯碼,并且步驟S305存儲(chǔ)譯碼結(jié)果(b)。
步驟S306對(duì)譯碼結(jié)果(a)和(b)進(jìn)行相互比較。如果它們彼此一致,則步驟S307確定已經(jīng)正確地對(duì)條形碼進(jìn)行譯碼。如果它們彼此不一致,則步驟S308放棄譯碼結(jié)果,因?yàn)樗鼈冎械闹辽僖粋€(gè)是錯(cuò)誤的。
如果步驟S303確定譯碼結(jié)果(a)沒有連續(xù)的特殊字符,則步驟S307確定譯碼結(jié)果(a)是正確的。
如果條形碼含有不連續(xù)的特殊字符中的任何一個(gè),則第三實(shí)施方式不在第二方向上對(duì)條形碼進(jìn)行譯碼。然而,這種技術(shù)并不限制本發(fā)明。
圖15是示出根據(jù)本發(fā)明第四實(shí)施方式的條形碼譯碼程序的流程圖。第四實(shí)施方式檢測剛剛被譯碼的第一個(gè)字符,以確定它是否是特殊字符E1、E2、E7、E8、O1、O2、O7和O8中的一個(gè),并且如果是,則根據(jù)將被譯碼的第二字符的條寬度對(duì)第一字符的條寬度進(jìn)行校正。之后,第四實(shí)施方式再次對(duì)第一字符進(jìn)行譯碼并確定第一字符的譯碼結(jié)果在條寬度校正之前和之后是否是不變的。
當(dāng)需要時(shí),第一至第三實(shí)施方式中的任何一種都在第一和第二方向上對(duì)給定條形碼進(jìn)行完整地譯碼。這可能加長譯碼時(shí)間并降低條形碼讀出器的工作效率。于是,第四實(shí)施方式只在不同方向上對(duì)特殊字符進(jìn)行譯碼,并確定譯碼結(jié)果是否彼此相同。
步驟S402對(duì)當(dāng)前字符進(jìn)行譯碼。步驟S403確定先前字符是否是特殊字符E1、E2、E7、E8、O1、O2、O7和O8中的一個(gè)。如果不是,則對(duì)下一字符進(jìn)行譯碼。
如果前一字符是特殊字符中的一個(gè),則步驟S404確定當(dāng)前字符是否是特殊字符中的一個(gè)。如果當(dāng)前字符是它們中的一個(gè),則不必根據(jù)當(dāng)前字符的條寬度對(duì)前一字符的條寬度進(jìn)行校正,因?yàn)榭赡芤鹦U`差。因此,步驟S406進(jìn)行到下一字符。
在步驟S404中如果當(dāng)前字符不是特殊字符中的一個(gè),則根據(jù)當(dāng)前字符的條寬度對(duì)前一字符的條寬度進(jìn)行校正。并再對(duì)前一字符進(jìn)行譯碼。步驟S405對(duì)前一字符校正前后的譯碼結(jié)果進(jìn)行相互比較。如果它們彼此一致,則步驟S406進(jìn)行到下一字符。如果它們彼此不一致,則步驟S407確定前一字符的譯碼是錯(cuò)誤的。
以這種方式,第四實(shí)施方式只對(duì)必須驗(yàn)證的字符在兩個(gè)方向上進(jìn)行譯碼,并確定譯碼結(jié)果是否是可接受的。第四實(shí)施方式僅在一個(gè)方向上對(duì)不需驗(yàn)證的字符進(jìn)行譯碼,以縮短譯碼時(shí)間。
圖16是示出根據(jù)本發(fā)明第五實(shí)施方式的條形碼譯碼程序的流程圖。該實(shí)施方式根據(jù)當(dāng)前字符的譯碼結(jié)果重復(fù)對(duì)連續(xù)特殊字符的譯碼,以驗(yàn)證特殊字符。
步驟S502對(duì)當(dāng)前字符進(jìn)行譯碼。步驟S503檢查第一先前字符,以確定它是否是特殊字符E1、E2、E7、E8、O1、O2、O7和O8中的一個(gè)。如果是這樣,則步驟S504檢查第二先前字符,以確定它是否是特殊字符中的一個(gè)。如果步驟S504和S504中的任何一個(gè)步驟給出否定回答,則步驟S507進(jìn)行到下一字符。
如果第一和第二先前字符都是特殊字符之一,則步驟S505確定當(dāng)前字符是否不是特殊字符中的一個(gè)。如果當(dāng)前字符是正常字符,則步驟S506根據(jù)當(dāng)前字符的條寬度校正連續(xù)特殊字符的條寬度,對(duì)校正后的連續(xù)特殊字符進(jìn)行譯碼,并且對(duì)校正前后的字符進(jìn)行相互比較。如果它們彼此一致,則步驟S507確定譯碼字符是正確的并且進(jìn)行到下一字符。如果它們彼此不一致,則步驟S508確定譯碼字符是錯(cuò)誤的。
在步驟S505如果當(dāng)前字符是特殊字符中的一個(gè),則步驟S507進(jìn)行到下一字符,而不校正先前特殊字符的條寬度。
如上所述,本發(fā)明在兩個(gè)方向上對(duì)條形碼進(jìn)行譯碼,并且對(duì)譯碼結(jié)果進(jìn)行相互比較,以確定譯碼結(jié)果是否正確。本發(fā)明使得對(duì)條形碼的譯碼可靠性高于現(xiàn)有技術(shù)。
本發(fā)明根據(jù)相鄰字符兩次校正特殊字符。對(duì)經(jīng)過兩次校正之后的譯碼結(jié)果進(jìn)行相互比較,以對(duì)校正進(jìn)行驗(yàn)證。
如果所譯碼的先前字符是特殊字符中的一個(gè),則本發(fā)明根據(jù)當(dāng)前字符對(duì)先前字符進(jìn)行校正并再次譯碼。對(duì)校正前后的先前字符的譯碼結(jié)果進(jìn)行相互比較,以對(duì)校正和譯碼結(jié)果進(jìn)行驗(yàn)證。不需要驗(yàn)證的任何正常字符只在一個(gè)方向上譯碼,以減少譯碼時(shí)間。
如果有連續(xù)的特殊字符,則在不同方向上對(duì)它們進(jìn)行譯碼,使得條寬度校正誤差的傳播最小,并且提高條形碼譯碼的可靠性。
權(quán)利要求
1.根據(jù)從條形碼反射的光束對(duì)條形碼進(jìn)行譯碼的方法,包括步驟檢測反射光中的條形碼數(shù)據(jù);將條形碼數(shù)據(jù)存儲(chǔ)在存儲(chǔ)裝置中;在第一方向上從存儲(chǔ)裝置讀條形碼數(shù)據(jù)并對(duì)其進(jìn)行譯碼;在相反的第二方向上讀條形碼數(shù)據(jù)并對(duì)其進(jìn)行譯碼;以及確定在第一方向和第二方向上的譯碼結(jié)果是否彼此相同。
2.根據(jù)從條形碼反射的光束對(duì)條形碼進(jìn)行譯碼的方法,包括步驟檢測反射光中的條形碼數(shù)據(jù);將條形碼數(shù)據(jù)存儲(chǔ)在存儲(chǔ)裝置中;在第一方向上讀條形碼數(shù)據(jù)并對(duì)其進(jìn)行譯碼;如果在第一方向上的譯碼結(jié)果包括特殊數(shù)據(jù),則在第二方向上讀條形碼數(shù)據(jù)并對(duì)其進(jìn)行譯碼;以及確定在第一方向和第二方向上的譯碼結(jié)果是否彼此相同。
3.權(quán)利要求2的方法,其中特殊數(shù)據(jù)涉及一種字符,在第一和第二方向的每個(gè)方向上,在對(duì)該字符譯碼之前,根據(jù)每個(gè)方向上已經(jīng)譯碼的字符的條寬度,對(duì)該字符的條寬度進(jìn)行校正。
4.根據(jù)從條形碼反射的光束對(duì)條形碼進(jìn)行譯碼的方法,包括步驟檢測反射光中的條形碼數(shù)據(jù);將條形碼數(shù)據(jù)存儲(chǔ)在存儲(chǔ)裝置中;在第一方向上讀條形碼數(shù)據(jù)并對(duì)其進(jìn)行譯碼;如果在第一方向上的譯碼結(jié)果包括連續(xù)的特殊數(shù)據(jù),則在第二方向上讀條形碼數(shù)據(jù)并對(duì)其進(jìn)行譯碼;以及確定在第一方向和第二方向上的譯碼結(jié)果是否彼此相同。
5.權(quán)利要求4的方法,其中特殊數(shù)據(jù)涉及這樣的字符,在第一和第二方向的每個(gè)方向上,在對(duì)這些字符譯碼之前,根據(jù)每個(gè)方向上已經(jīng)譯碼的字符的條寬度,對(duì)這些字符的條寬度進(jìn)行校正。
6.根據(jù)從條形碼反射的光束對(duì)條形碼進(jìn)行譯碼的方法,包括步驟檢測反射光中的條形碼的條寬度數(shù)據(jù);將條寬度數(shù)據(jù)存儲(chǔ)在存儲(chǔ)裝置中;在第一方向上從存儲(chǔ)裝置讀條寬度數(shù)據(jù)并將其譯碼為第一字符;確定在第一字符之前剛被譯碼的第二字符的條寬度是否已經(jīng)根據(jù)在第二字符之前剛被譯碼的第三字符的寬度得以校正;如果第二字符的條寬度已經(jīng)根據(jù)第三字符的條寬度得以校正,則根據(jù)第一字符的條寬度校正第二字符的條寬度,并且再次對(duì)第二字符進(jìn)行譯碼;以及確定第二字符的兩個(gè)譯碼結(jié)果是否彼此相同。
7.條形碼讀出器,包括光源;用于從其上照射有來自光源的光的條形碼接收反射光、并提供表示條形碼數(shù)據(jù)的信號(hào)的接收器;用于存儲(chǔ)條形碼數(shù)據(jù)的存儲(chǔ)器;用于在第一方向和第二方向上分別對(duì)條形碼數(shù)據(jù)進(jìn)行譯碼的譯碼器;以及用于對(duì)第一方向和第二方向上的譯碼結(jié)果進(jìn)行相互比較的比較器。
8.條形碼讀出器,包括光源;用于從光源外部發(fā)射光的裝置;用于從條形碼接收反射光、并提供表示條形碼數(shù)據(jù)的信號(hào)的裝置;用于存儲(chǔ)條形碼數(shù)據(jù)的裝置;用于在第一方向上對(duì)條形碼數(shù)據(jù)進(jìn)行譯碼、并且如果在第一方向上的譯碼結(jié)果包括特殊數(shù)據(jù)則在第二方向上進(jìn)行譯碼的裝置;以及用于對(duì)第一方向和第二方向上的譯碼結(jié)果進(jìn)行相互比較的裝置。
9.權(quán)利要求8的條形碼讀出器,其中特殊數(shù)據(jù)涉及一種字符,在第一和第二方向的每個(gè)方向上,在對(duì)該字符譯碼之前,根據(jù)每個(gè)方向上已經(jīng)譯碼的字符的條寬度,對(duì)該字符的條寬度進(jìn)行校正。
10.條形碼讀出器,包括光源;用于從光源外部發(fā)射光的裝置;用于從條形碼接收反射光、并提供表示條形碼數(shù)據(jù)的信號(hào)的裝置;用于存儲(chǔ)條形碼數(shù)據(jù)的裝置;用于在第一方向上對(duì)條形碼數(shù)據(jù)進(jìn)行譯碼、并且如果在第一方向上的譯碼結(jié)果包括連續(xù)的特殊數(shù)據(jù)則在第二方向上進(jìn)行譯碼的裝置;以及用于對(duì)第一方向和第二方向上的譯碼結(jié)果進(jìn)行相互比較的裝置。
11.權(quán)利要求10的條形碼讀出器,其中特殊數(shù)據(jù)涉及這樣的字符,在第一和第二方向的每個(gè)方向上,在對(duì)這些字符譯碼之前,根據(jù)每個(gè)方向上已經(jīng)譯碼的字符的條寬度,對(duì)這些字符的條寬度進(jìn)行校正。
12.條形碼讀出器,包括光源;用于從光源外部發(fā)射光的裝置;用于從條形碼接收反射光、并提供表示條形碼數(shù)據(jù)的信號(hào)的裝置;用于存儲(chǔ)條形碼數(shù)據(jù)的裝置;用于在第一方向上對(duì)條形碼數(shù)據(jù)進(jìn)行譯碼、并且如果在第一字符之前剛被譯碼的第二字符的條寬度已經(jīng)根據(jù)在第二字符之前剛被譯碼的第三字符的條寬度得到校正則根據(jù)第一字符的條寬度對(duì)第二字符的條寬度進(jìn)行校正、而且再次對(duì)第二字符進(jìn)行譯碼的裝置;以及用于對(duì)第二字符的兩個(gè)譯碼結(jié)果進(jìn)行相互比較的裝置。
全文摘要
一種條形碼讀出器,如果條形碼含有其要寬度已經(jīng)被校正的特殊字符,則在不同方向上對(duì)條形碼進(jìn)行譯碼。該條形碼讀出器對(duì)不同方向上的譯碼結(jié)果進(jìn)行相互比較,以提高條形碼讀取的可靠性。如果譯碼結(jié)果彼此一致,則接受譯碼結(jié)果,否則放棄譯碼結(jié)果。
文檔編號(hào)G06K7/00GK1157443SQ9611795
公開日1997年8月20日 申請(qǐng)日期1996年12月25日 優(yōu)先權(quán)日1995年12月25日
發(fā)明者川合弘晃, 佐藤伸一, 伊藤元彥, 渡邊光雄, 巖口功 申請(qǐng)人:富士通株式會(huì)社