久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    為什么二維碼里面有三個大方塊?| 親子科學系列(9)

     人老顛東 2019-12-15

    我們前一篇文章討論了摩爾斯電碼,談到它對當代的計算機技術有著深刻的影響。這種影響并不是在具體的編碼方法上,而主要是體現在思維方法上。

    現在我們購買到的大多數商品,包裝上面都有條形碼。條形碼初期存在多個發明,現在也存在非常多的變種。條形碼可以算是和摩爾斯電碼沾點邊,因為早期的一位發明家曾經受到過摩爾斯電碼的啟示。確實,從某種意義上說,我們可以想象把摩爾斯電碼的點和劃,垂直畫成線,變成窄和寬的條紋。當然現在主流應用上的條形碼,并不是簡單地從摩爾斯電碼轉換來的。

    條形碼世界

    今天,計算機越來越多地參與著我們生活的方方面面。為了把信息迅速方便地送入計算機,人們設計了各種各樣的編碼,條形碼就是其中的一種。其他的編碼方法,比如RFID,盡管成本越來越低,但相比之下,條形碼仍然是最便宜的,其成本幾乎為零,因為條形碼只需要用油墨印在包裝盒上即可。

    條形碼是怎樣將信息編碼的呢?對于不同的應用存在許多標準。我們這里介紹一下其中一個標準,即GTIN-13以及它所對應的條形碼編碼標準EAN-13。GTIN是Global TradeItem Number的意思,其中的GTIN-13標準是用13位數字代表全球貿易中的萬物。其中最高的三位代表生產物品的國家,比如中國生產的產品前三位是690-695。其余一些位數表示地域,行業等信息,靠后的一些位數是物品的代碼。如果13位數全部用滿,可以表述10萬億種不同的物品,足夠全球所有人每人研發1000種不同的商品。

    我們現在在市場上買到的商品,大部分都有這樣一個13位數的代碼。GTIN兼容了國際標準書號(ISBN),國際標準期刊序號(ISSN)等等。當GTIN-13需要印刷成條形碼的時候,使用的是EAN-13條形碼標準。

    比如作者參與寫作的一本科學普及書的條形碼,如下圖所示。對于圖書,不管是哪個國家出版的,其前三位都被指定為978或979。而雜志期刊等,前三位總是977。

    大家可以仔細觀察上面的條形碼,我們可以看到數字5出現了幾次,不過它們似乎長的不完全一樣,在左邊的兩個是一個樣,而在右邊的兩個顯然不同。如果認真看看,左邊與右邊條紋是“黑白顛倒”的關系。可是,再看看左邊出現的兩個7,它們似乎也不一樣。此外,在條形碼左邊與右邊各有6位數字,這并不難理解,但整個碼符號的最左邊那個9是怎么來的?難道可以無中生有嗎?


    為此,我們需要了解一下EAN-13(包括ISBN,ISSN,UPC等)條形碼的生成規則。

    條形碼的編碼規則

    EAN-13條形碼是用兩個條紋來表示一個數字的,整個碼包括13個數字,其中直接編碼12個,左邊6個右邊6個,第13個用后面介紹的方法隱含編碼。條形碼兩邊與中間安排了起始符(S)中間符(M)以及結束符(E),各為兩個窄條。因此,所有碼,不管具體數字是什么,都包含有30個條紋。

    那么,每個數字又是怎樣用兩個條紋表示的呢?這就需要我們在更細尺度上討論。每個數字的兩個條紋,包括了兩黑兩白四個區域,它們的總寬度為7個單位寬度。這個單位寬度可以根據印刷精度自由選擇,比如當我們把單位寬度選定為0.5毫米時,每個數字所占寬度為3.5毫米。

    對于左邊6個數字,每個數字的左邊一定是白的,而右邊一定是黑的。每個數字從左到右都是“白黑白黑”地構造。這樣,當幾個數字一個個緊挨在一起的時候,它們之間就可以存在一個清晰的邊界。

    了解了這些,我們就可以想象自己是當年制定這種條形碼的設計師,很容易地數一數可用的編碼有哪些。

    我們可以把7個單位寬度組合在一起,看成7個比特的二進制數。如果這7個比特可以任意安排黑白,則可以表達128個字符。不過我們已經限定最左邊一定是白色,最右邊一定是黑色,這樣就只有中間5個比特可以改變,或者說最多可以表達32個字符。把這32個可能的字符全部畫出來,就得到下面這個圖。

    現在,我們把不符合“白黑白黑”要求的字符去掉,還剩下20個可用的字符。這20個字符又可以分成兩類,一類包含有奇數個(3個或5個)單位寬度為黑,共10個,另一類包含有偶數個(2個或4個)單位寬度為黑,也是共有10個。我們把這兩類字符分別用來作為0-9數字的代碼。其中奇偶性為奇的10個稱為EAN-L碼,在上面圖中用淺棕色標注。奇偶性為偶的10個稱為EAN-G碼,在上面圖中用淺綠色標注。這兩種左邊的條形碼如下圖所示。

    那么,右邊的條形碼又是什么樣的呢?我們希望最終的條形碼具有一定的對稱性,比如希望右邊的碼左黑右白,這樣可以與結束符(E)有一個清晰的邊界。因此最簡單的一個做法,是把EAN-L碼黑白顛倒,這樣我們就有了EAN-R碼,如下圖所示。顯然,由于EAN-L的奇偶性為奇,因此很容易看出EAN-R的奇偶性為偶,里面黑條的總寬度為偶數個單位寬度,與EAN-L正好反過來。

    有了左邊與右邊數字的條形編碼圖形,我們就很容易拼接出一個完整的條形碼。當我們只需要編碼12個數字時,也就是說當13位數中最高位為0時,左邊6個數字都用EAN-L碼,右邊6個數字則用EAN-R碼。把數字與S,M,E符拼接在一起后,我們就可以得到如下圖所示的條形碼。

    我們前面問過一個問題,在13位編碼的整個條形碼碼符號的最左邊那個數字(我們前面圖書的條形碼中的9)是怎么來的。此外,大家還會問,我們前面談到的EAN-G圖形能不能用在條形碼的左邊,代替EAN-L碼?實際上,這兩個問題是聯系在一起的,EAN-13中,最左邊那個數字,就是利用EAN-G圖形,代替左邊6個數字中一部分EAN-L圖形來表述的。


    在條碼左邊6個數字中,每個數字可以選用L或者G兩種碼。因此通過選擇每一位的L或G,一共可以得到64(2的6次方)種組合。人們從這64種組合中,挑出了10個組合,用來表述13位編碼中的最左邊那個數。這10個組合以及它們代表的數字為:
    0=LLLLLL;1=LLGLGG;2=LLGGLG;3=LLGGGL;4=LGLLGG;5=LGGLLG;6=LGGGLL;7=LGLGLG;8=LGLGGL;9=LGGLGL。
    這樣一來,最左邊這個數不需要直接用一個單獨的圖形表述,而只需要通過選配左邊6個數字編碼圖形的L或G組來“隱喻”。

    現在我們再回過頭看我們前面那本書的條形碼,原來的一些疑問也就豁然開朗了。

    首先,右邊的兩個5與左邊的兩個5自然不會是相同的,我們知道 EAN-L 與 EAN-R 對應的10個編碼,是黑白反轉的關系。那么,同在左邊的相同數字編碼一樣嗎?不一定。比如上面條碼中左邊的兩個7,它們一個是 L 碼另一個是 G 碼。因為這個條碼編碼了第13位數字9,因此左邊6個數字的L或G的選擇為9=LGGLGL,因此它的第一個7是L而第二個7是G,所以這兩個7長得不一樣。此外,我們還可以看出左邊的兩個5恰好都是L,否則它們也未必相同。

    條形碼帶給我們的啟示

    在很多編碼工作的實踐中,我們的著眼點是提高編碼的效率。也就是說,利用盡量少的資源來存儲或者傳輸比較多的信息。但是在設計條形碼的時候,更需要考慮的,是可靠性和準確性。為此,我們可能會“浪費”一些編碼資源,來提高編碼的冗余度。

    在前面談到的條形碼中,每個數字的編碼空間有7個單位寬度,如果充分利用可以編制128個字符。但是我們對編碼空間作了限制:(1)左白右黑,(2)包含兩個條紋。這樣一來,這個編碼空間中就只剩下20個可以用的組合了。但是這樣做帶來的好處非常多。首先是兩個數字挨在一起,它們之間存在一個黑白清晰的邊界。同時在每個數字的編碼空間中,也不會出現一大片黑,或者一大片白的狀況,而是存在足夠的黑白變化,便于掃描器辨別。更重要的是,這樣的編碼方法提供了很多簡便的查錯方法。比如一個完整的條形碼,不論是什么內容,總是包含30個條紋。這樣,當掃碼器掃過之后如果發現多于30或少于30個條紋,立即就能知道是出錯了。

    條形碼應用中,還會出現一個常見的復雜性,就是掃碼器既可能從左向右正著掃,也可能反過來掃。這就要求條形碼自身攜帶左右標識。當我們在條形碼的左邊使用EAN-L碼,右邊使用EAN-R碼的時候,條形碼的左右就非常分明。左邊所有數字的奇偶性為奇,右邊所有數字的奇偶性為偶。當我們需要編制13位數編碼,因此在左邊6個數中有些會使用EAN-G碼的時候,左邊有些數字的奇偶性也可能呈現偶。不過,我們前面看到,左邊6個數中最左邊那一位總是使用L碼,這就足以作為條形碼的左標識了。

    從條形碼到二維碼

    條形碼毫無疑問是非常成功的,但由于條形碼是編碼空間是一維的,因此可以攜帶的信息非常有限。很自然,人們想到要向平面上兩個維度發展。多年來,二維的條形碼出現過許多標準及變化。我們今天經常看到的一種是QR碼。下圖所示QR碼是作者創作的一個科學普及音樂視頻文件在微云上的鏈接。

    這里特意提醒一下讀者,一個二維碼當中,直接編碼的內容是幾十乃至上百個字母或數字,它們通常構成一個鏈接,但它們不是視頻文件本身。視頻文件往往會需要幾十 MB 乃至幾十 GB 存儲空間,二維碼存儲不了那么多的數據。

    當然,二維碼要容納幾十乃至上百個字母和數字也并不容易。對比條形碼,人們對二維碼在可靠性和準確性上的要求是一樣的。但是,二維碼要比條形碼容納更多的信息,因此還必須兼顧編碼的效率。這兩項要求在有的情況下是矛盾的,但是在很多時候二者是相輔相成的。

    二維碼掃碼使用時通常是用手機來拍照,在手機內得到一個由像素構成的二維點陣。手機中的軟件只有可靠準確地獲得了二維碼的高度寬度等外形參數,才能正確地讀取編制在二維碼中的數據。那么,怎樣才能方便地獲取二維碼的外形參數呢?這就需要我們在設計時作出仔細的考慮。

    從QR碼上,可以看到在左上角,右上角和左下角各有一個口字形或回字形的方塊。我們應該可以猜測出,這三個方塊就是為了提供二維碼外形參數的。

    問題是,為什么需要三個方塊呢?只在左上角上留一個方塊行不行?我們知道手機的照相機照出來的照片是會發生形變的,如果只有一個方塊,就很不容易獲取二維碼的高度和寬度這兩個參數。

    如果只留兩個方塊,比如,保留右上角和左下角這兩個方塊。這好像也不行,因為在手機的照片中,軟件無法去辨認哪邊是上哪邊是下。如果只保留左上角和右上角兩個方塊,則上下倒是可以區分出來了。但是由于手機照片的形變,我們只能得到二維碼寬度這個參數,而很難得到高度這個參數。因此,我們現在看到的二維碼里面有三個大方塊。

    我們這里談到的僅僅是一些最基本的考慮,實際上二維碼里的學問還是不少的,這里有一個問題提供給大家思考。下面這個二維碼中,只包含了一個字母“a”。既然只有一個字母,那么這個字母占據的面積應該是很小的吧?因此在整個碼所占的面積中,應該大部分是空白。

    但是,我們并沒有在上面這個二維碼中看到大塊的白色或黑色區域,而是到處都是錯落有致,黑白相間。大家不妨想想為什么要這樣設計?用什么辦法可以做到這點?


    孩子們在世間遇到的問題從來不會按照教科書的次序,先易后難。他們可能還沒有學過二進制,但卻可能在任何時候找到一個條形碼或者二維碼來問家長。怎樣才能不被孩子問住呢?很簡單,和孩子一塊找一堆條形碼或二維碼一塊研究研究,找找規律,再上網查查,定會有所收獲。

    小賽:快來研究這塊二維碼 ↓ ↓ ↓ 

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 中文字幕亚洲制服在线看| 国产高清自产拍AV在线| 99热精国产这里只有精品| 无码人妻久久一区二区三区APP | 国色天香天天影院综合网| 亚洲AV无码成人网站手机观看 | 国内精品久久久久久久影视| 亚洲午夜爱爱香蕉片| 办公室强奷漂亮少妇同事 | 国产精品无码无卡在线播放| 国产小受被做到哭咬床单GV| 亚洲精品无码中文久久字幕 | 欧美性猛交xxxx乱大交丰满| 亚洲综合无码明星蕉在线视频| 精品香蕉久久久午夜福利| 亚洲中文字幕一区二区| 麻花传媒免费网站在线观看| 无码精品久久久久久人妻中字 | 国产精品久久久久影院亚瑟| 国产成人av电影在线观看第一页| 亚洲AV福利天堂在线观看| 久久AV无码精品人妻糸列| 国产97视频人人做人人爱| 下面一进一出好爽视频| 99精品视频在线观看婷婷| 国产一区二区三区av在线无码观看| 国产美熟女乱又伦AV果冻传媒| 久久午夜无码免费| 午夜福利试看120秒体验区| 国产在线播放专区av| 亚洲国产精品一区二区WWW| 国产成人精彩在线视频| 亚洲欧美日韩国产综合一区二区| 2019国产精品青青草原| 公喝错春药让我高潮| 果冻传媒MV国产推荐视频| 国产明星精品无码AV换脸 | av在线播放国产一区| 香蕉影院在线观看| 国产AV午夜精品一区二区三区| 亚洲国产午夜福利精品|