這裡我隨便在我的編譯原理這本書後面拍的一個條形碼來進行說明

一維條形碼識別的整個過程原理通俗易懂講解

以下為一個示意圖,一維條形碼一共有如下幾個區域組成(其實一個條形碼下面已經給出了代表哪些數字了,我寫的這篇文章講述其原理,教機器如何讀取)

一維條形碼識別的整個過程原理通俗易懂講解

首先明白如下幾點:

一、條碼的黑色條表示二進位制的1,白色代表0,而且0。33mm寬度的黑色或者白色條為一個基本的二進位制位,下面可以看出有的黑色條很寬,說明連著好幾個二進位制1,下面這個圖是上面那個圖的放大。

一維條形碼識別的整個過程原理通俗易懂講解

二、一維條形碼只能表示數字,不能表示字母符號和漢字,每個數字由7個二進位制位組成,而且這些二進位制組成的規則不是ASCII碼,而是自己的一套編碼規則,比如 0000 101,這個表示的不是數字5(ASCII碼錶示的就是5),應該按照官方給的如下編碼表進行解碼,查詢下面的表發現是左側資料符的偶性字元(B組)中的6。起始符,終止符編碼為101,分隔符編碼為01010(沒有為什麼,官方規定的,如果哪天你發明了啥,你就是官方,你想咋規定就咋規定)

一維條形碼識別的整個過程原理通俗易懂講解

三、可以數一下上面的兩個條形碼,一維條形碼都是由13個數字(是1 2 3。。。這樣的數字,不是二進位制0 1 0 10這樣的數)組成,分別代表如下的意思,:前三個數:製造碼,接著四個數:製造商程式碼,接著五個數:商品標識程式碼,最後一個數:校驗碼

比如第二張圖片條形碼是692 0152 46102 0,

692(製造碼),0152(製造商程式碼),46102商品標識程式碼,0(校驗碼)可以用來防偽以及識別校驗

而第一個數字(被稱為前置碼)是隱藏的,不佔用黑條白條來表示(由後面數字的奇偶性來推斷出,這個是官方規定的規則,後面我會進一步解釋其原因),所以扣掉一個數字,總的只有12個數字(左側資料符6個+右側資料符6個),剛剛我說了一個數字由7個二進位制位組成,每一個二進位制位由一個黑條或者白條來表示,而每一個條的寬度為0。33mm,所以這裡可以計算一下:

(13-1)*7+11 = 95個黑色或者白色的單位寬度0。33mm的條,其中的11個二進位制位是起始符,終止符編碼為101,分隔符編碼為01010,總共佔掉11個黑色或者白色的條

95*0。33 = 31。35mm = 3。135cm,你可以用尺子量一下你所看到的一維碼,總的寬度是不是這麼寬

四、上面這個官方EAN-13編碼表是最常用的一維碼編碼方式,我們認真觀察一下會發現,同一個數字竟然有三種編碼方式,而且每一個編碼結果都對應唯一的一個數字(你在上面找不出重複的兩個二進位制串對應同一個數字),也就是編碼是唯一的,只要隨便給我一個二進位制串0001011,對比上面的表就可以唯一確定對應的是左側奇性字元A組的9,這個數字。但是你給我一個數字9,我卻不能唯一確定他對應的是哪個二進位制串,因為有三種編碼方式,上表可以找出0001011,0010111,1110100三個二進位制串與之對應。這個意思就是解碼出數字是唯一的,但是逆回去卻不是唯一的,不過沒關係,我們條形碼代表的就是一個二進位制串,需要的僅僅是解碼就行了,所以解碼出來的每個數字一定是唯一的。

五、剛剛說的第一個數字為啥是隱藏的,可以直接由後面數字的奇偶性推斷出來,以及與剛剛那個解碼錶的三種編碼方式有什麼聯絡,為什麼每個數字要規定三種二進位制串的編碼方式從而搞得這麼麻煩,接下來揭開它的神秘面紗:

再來看看這張圖,圖中用黑或者白條能表示的數字,真正的其實只有12個數字(左側資料符6個,右側資料符6個),第一個前置碼6這個數字實際上是由 左側資料符6個數的奇偶性推測出來的,這個具體什麼意思呢

一維條形碼識別的整個過程原理通俗易懂講解

比如剛剛上面圖片條形碼是692 0152 46102 0,

692(製造碼),0152(製造商程式碼),46102商品標識程式碼,0(校驗碼)可以用來防偽以及識別校驗

這裡第一個6就是前置碼,920152稱為左側資料符,461020稱為右側資料符。而你如果用掃描槍掃描這個條形碼,實際上獲得的只是92 0152 46102 0這12個數,那為啥就能得到前置碼6,最後得到最終的一維碼為692 0152 46102 0的呢,實際上這裡的前置碼6就是由左側資料符920152的奇偶性推斷出來的,首先指明一個誤區,不是指9奇數,2偶數,0偶數。。。這樣的奇偶性,而是指下面這個表1 EAN-13編碼強制規定的奇偶性(其實不是啥奇偶性,就是官方搞了這麼一個名字,我覺得有點誤導人),來看看這個表,我們可以得出,左側資料符分為奇性字元,偶性字元兩種,而右側資料符都被規定為偶性字元了。我們來看看掃碼槍的執行過程吧:掃碼槍一次性“滴”掃完了整個條形碼,實際上是序列的,慢動作來看就是,從這邊第一個黑條一個一個往右邊掃描,直到掃完這95個條(指的是單位寬度0。33mm的條,很寬的黑色條是包含了好幾個黑條)。那麼掃到的這些條,按照組成規則,會自動去掉起始符,中間分隔符,終止符,剩下了真正有用的條。現在前7個條(黑條代表二進位制1,白條代表0)就會根據下面這個表EAN-13查找出對應的字元,並記錄其左右性和奇偶性,

除開前置碼,現在前7個條是 白,白,白,黑,白,黑,黑(注:這裡所說的白,黑條指的是單位寬度0。33mm的條,你看到的很寬的黑條實際上是由好幾個單位寬度的黑條組成的,也就是會解析出來好幾個連著的二進位制1)。

一維條形碼識別的整個過程原理通俗易懂講解

也就是0001011,從上圖中也能清清楚楚看出就是0001011,查下面的表發現對應數字9(當然條形碼下面也直接標出了9,但是掃碼槍不知道,他只能識別黑條,白條),那麼再看他屬於的類,發現它屬於左側資料符,而且是奇性字元(注:和9是奇數沒有任何關係),我們再看看,因為我們的掃碼槍是順序掃描(從左往右掃描),那前六個掃到的當然就屬於左側字元啦,這裡我們跟我們查表出來是左側資料符相吻合了,就說明完全正確了,我們的掃碼槍或者一維碼沒有拿反(其實官方這個表之所以這樣規定,就是可以判斷掃描正反,防止掃描錯誤)。同時從這個表我們記錄下這個字元9屬於奇性字元。接下來我們繼續往右掃描,得到0011011,查表發現是左側偶性字元2,仍然是左側字元,吻合,而且記錄下他的奇偶性為偶性,再繼續向右掃描得到……

一維條形碼識別的整個過程原理通俗易懂講解

掃描完左側字元的42個條碼後(每個字元由7個條碼組成,左側字元總共有6個,總的就是42個條碼),得到了六個字元920152後,同時得到了這六個字元的奇偶性(注:這裡說的奇偶性不是指數字本身的奇偶性,而是上面官方表中強行規定的奇偶性),比如是,奇,偶,偶,偶,奇,奇,然後再查下面的表2,發現對應的前置碼為6(o代表奇性,E代表偶性)。所以我們的掃碼槍掃描得到6個數,然後又推匯出了第一個前置碼,所以就得到了7個數6920152,然後同理再掃描右側資料符6個數就行了,只是不需要記錄奇偶性了,因為我們已經不再需要推導啥數字了(而且從上面的表可以看出,右側資料符都被強行規定為偶性字元了),掃描右側字元得到461020,所以現在總的一維碼就是6 920152 461020,ok總的一維碼識別以及結束了,剩下了就是查資料庫692(製造碼,),0152(製造商程式碼),46102商品標識程式碼,0(校驗碼)可以用來防偽以及識別校驗,跟資料庫進行對比,得到到底屬於哪的製造碼,哪家制造商,屬於哪個商品了呀。對了這裡校驗碼的作用講一下,是最後一個數,用於判斷讀取是不是正確的,就是判斷這個一維碼是否被人惡性破壞了,或者掃碼槍自己壞了等等情況。

注:從上面這個編碼表可以看出,每個數字都是由0。。1。。0。。。。1或者1。。0。。1。0這樣子組成的(黑條代表1,白條代表0),

一維條形碼識別的整個過程原理通俗易懂講解

一維條形碼識別的整個過程原理通俗易懂講解

也就是說明每個數字一定有兩個交錯黑條和兩個交錯排列的白條組成,這是官方規定的,沒有為什麼,可以仔細觀察你所看到的一維碼,一定是這樣的規則

總結:一維碼讀取過程如下

1、掃碼槍利用一維碼上面白和黑條的不同反光率,射出的紅色光線得到不同的反射強度,然後利用光電感測器轉為電訊號,濾波放大後轉為數字訊號0,1。每個數字由7個黑色或者白色單位寬度的條組成。當然你可以用攝像頭拍攝然後影象處理方式進行一維碼中0,1的提取也是可以的

2、從左往右掃描得到左側6個數字,同時根據編碼表給出的奇偶性推匯出第一個前置碼為多少,再掃描右側資料符6個,得到了總的13個數據符

2、這13個數字裡麵包含了產品的重要資訊,跟資料庫進行對比得到產品的生產商,產品名稱等資訊

我在寫這篇文章之前也是參考了很多的文章,其實我覺得講得都不直觀,很多重要點都沒能通俗表述出來,我也是參考那麼多文章加上自己的理解,寫出的這篇目前為止最為通俗易懂的文章了

————————————————

版權宣告:本文為CSDN博主「biao2488890051」的原創文章,遵循 CC 4。0 BY-SA 版權協議,轉載請附上原文出處連結及本宣告。

原文連結:

https://

blog。csdn。net/kangkangl

hb88008/article/details/86468830