2016年12月
一、(滿分25分)超市里的商品都有一個識別的號碼,這個號碼用可由光學掃描儀讀出的條形來編碼,通常稱為條碼.例如下圖所示.圖中給出的識別號碼是0 8 9 6 0 0 1 2 4 5 6 9.這個號碼稱為通用產品碼(UPC),廣泛用于商品編碼.在大多數情況下,分配給產品的號碼是一個12位數字,前11位的數字是商品項目代碼,最后1位是校驗碼.校驗碼用于檢驗前11位商品編碼的正確性.檢驗的原理是要保證同類商品的所有12位編碼數字的和(或加權和)被某個整數整除.

上述商品項目代碼為08960012456.所有數字和為0+8+9+6+0+0+1+2+4+5+6=43,若想讓UPC的每位數字和可以被10整除,就要選取校驗碼為7,于是得到該商品的UPC為0 8 9 6 0 0 1 2 4 5 6 7.顯然,在商品項目代碼中,無論哪一位單個數碼的改變都會改變整個編碼的整除性,從而被校驗碼告知“編碼有誤”.
但是最常見的商品項目代碼書寫錯誤是將其中的兩個相鄰數字寫顛倒,譬如將上述代碼寫成08960012465(末兩位數顛倒了).但它的校驗碼也是7,校驗失效!因此簡單求和的方法很少被采用.
對上述問題,可以通過如下的加權求和的辦法修正校驗.設UPC加權求和的權數為(ω1,ω2,…,ω12)=(3,1,3,1,3,1,3,1,3,1,3,1),可以算得商品項目代碼0 8 9 6 0 0 1 2 4 5 6的加權和為
3×0+8+3×9+6+3×0+0+3×1+2+3×4+5+3×6=8+27+3+6+2+12+5+18=81,于是在這個加權和的方式下,若想讓UPC的每位數字和被10整除,則校驗碼應為9,即81+9=90被10整除.因此,正確的UPC應是 0 8 9 6 0 0 1 2 4 5 6 9.
對于錯誤的編碼0 8 9 6 0 0 1 2 4 6 5 9,計算它的加權和為
3×0+8+3×9+6+3×0+0+3×1+2+3×4+6+3×5+9=8+27+3+6+2+12+6+15+9=88,
不能被10整除,表明該編碼有誤.校驗成功!
(1)某商品項目代碼為02100065897,請根據權數(3,1,3,1,3,1,3,1,3,1,3,1)計算它的校驗碼.
(2)根據權數(3,1,3,1,3,1,3,1,3,1,3,1)確定的校驗碼,對“相鄰數字寫顛倒”的錯誤檢驗絕對有效嗎?……