導覽


04. 錯誤的發現與修正

當資料儲存在磁碟或是要從一台電腦傳送到另一台時,我們會希望在傳送過程中,資料不會因為任何原因而被改變。然而,有時候還是會發生一些意外性錯誤,使資料毀損或改變。在以下活動中,我們會使用一個魔術般的手法,在資料受損而被改變時能夠發現並修正它。

卡片翻轉魔術

1. 請一位同學操作,將卡片以5 x 5的方式排好,並隨意翻至不同面。
2. 老師會任意增加一行或一列(增加的卡片稱為同位卡Parity Card),讓它看起來更複雜。
3. 老師蒙上眼睛,請同學在已經排好的卡片堆中任意選擇一張,並使其翻到不同面。
4. 老師可以很快地找出被翻面的那張卡片。你猜猜是如何做到的?
5. 如果同學翻了兩張或兩張以上的卡片,還能找出來被翻動過的卡片嗎?
6. 嘗試擴大卡片的版面(例如變成9 x 9),同位卡的操作讓它變成10 x 10,再操作這個魔術一次。

04-1. 書碼與條碼

已發行的書本上,會有一組10或13位數的數字,通常會印在書背上。最後一位的數字就是檢查碼,就像卡片翻轉魔術中的同位卡片一樣。

這表示如果你訂購了一本使用了ISBN (International Standard Book Number,國際標準書號) 的書,網站能幫你檢查書號有沒有錯誤。只需要依據規則檢查同位檢查碼就好了,這樣就不會等了老半天,卻拿到錯誤的書本。

食品雜貨所使用的條碼,用的是不同的公式。如果條碼讀錯了,掃描器會發出嗶嗶的聲音,櫃檯的結帳人員就會重新掃描一次條碼。此外,檢查碼的概念還會應用在銀行帳號、身份證字號、火車等大眾交通工具等。

使用10位數字的國際標準書號,又稱為ISBN-10;使用13位數字的國際標準書號,則稱為ISBN-13,分別有不同的檢查方式

1. ISBN-10:

例如:ISBN為0-13-911991-4的書,依據以下公式,算出來的值為

(0 x 10) + (1 x 9) + (3 x 8) + (9 x 7) + (1 x 6) + (1 x 5) + (9 x 4) + (9 x 3) + (1 x 2) = 172

接著將算出來的值除以11,餘數是多少?

172 ÷ 11 = 15 餘 7

如果餘數是0,檢查碼就是0。如果不是的話,就用11減掉餘數,得到的值就是檢查碼。

11 - 7 = 4

最後檢查該書號的最後一碼,跟算出來的檢查碼是否一致。必需是一致的,才代表這個ISBN碼正確。

2. ISBN-13:

例如:ISBN為978-986-181-728-6,依據以下公式,算出來的值為

(9 x 1) + (7 x 3) + (8 x 1) + (9 x 3) + (8 x 1) + (6 x 3) + (1 x 1) + (8 x 3) + (1 x 1) + (7 x 3) + (2 x 1) + (8 x 3) = 164

接著將算出來的值除以10,餘數是多少?

164 ÷ 10 = 16 餘 4

如果餘數是0,檢查碼就是0。如果不是的話,就用10減掉餘數,得到的值就是檢查碼。

10 - 4 = 6

最後檢查該書號的最後一碼,跟算出來的檢查碼是否一致。必需是一致的,才代表這個ISBN碼正確。

練習1:請將下列ISBN碼的最後一位檢查碼填上正確數字。
(1) 986-470-526-□
(2) 978-986-470-666-□

練習2:找出下列ISBN碼中,正確的選項
(1)
(A) 986-929-945-8
(B) 986-235-536-0
(C) 986-235-543-3

(2)
(A) 978-986-477-101-3
(B) 978-957-136-792-7
(C) 978-986-931-045-9

練習3:按照指示,打開金石堂網路書店的網頁,找到任一書本的ISBN碼後,利用公式實際檢查該書本的ISBN碼是否正確。

練習4:透過金石堂網路書店的進階搜尋功能,輸入在剛剛的練習題中得到的正確ISBN-13碼,看看找到的是什麼書。

【這個活動在說什麼?】

想像你將10塊錢現金存入銀行的帳戶。出納員整理出所有存款的量,並傳送到中央電腦。假設在傳送的過程中, 線路發生了一些干擾,結果數字從10塊錢變成1000塊。雖然你會覺得開心,但是這對出納員來說是一個天大的災難。

在傳送資料時檢查錯誤是非常重要的。所以接收端的電腦需要檢查傳過來的資料沒有因為某些干擾造成損毀。有時候發生傳送錯誤時,原始資料可以再傳送-次,但有些情況則是不行,比方說磁碟因為曝露在磁力或電力輻射或是高溫下,或是任何其它的物理性破壤而造成資料損毀。 如果資料是從深遠的太空偵測器傳送過來,那麼當錯誤發生時,等待重新傳送將會需要非常長的一段時間。(若在木星最靠近地球時,傳送訊息至地球大約需要半個小時)

因此,當資料損毀時,我們需要有辦法發現(錯誤檢查),並且能重建原始的資料(錯誤修正)。在卡片魔術活動時所用的技巧,藉由加入同位檢查位元到每一列與每一行,這樣我們不只能發現錯誤,還能找出錯誤的位置。這個出問題的位元會被改回去,這就是錯誤修正。

當然,電腦使用的錯誤控制系統通常會複雜得多,以檢查和修正多重錯誤。電腦中的硬碟裡,有很大量的空間是被用來做錯誤修正的。這樣即使部份的硬碟壞了,也還是可以工作。

04-2. 以試算表作驗證碼的檢查與產生

【ISBN-10檢查碼的產生】

1. 以google帳戶登入繳交作業的連結。

2. 按下左上角的「新增」按鈕,點選「google試算表」,開啟一個空白的文件。

3.在第一橫列上,從B1開始依序在每一欄輸入前9個號013911991

運算1:按以下公式算出結果,置於儲存格B3

運算2:使用函數MOD,取除以11的餘數,運算結果置於儲存格B4

運算3:使用函數IF,若餘數為0,則檢查碼=0;否則檢查碼為11減掉該餘數。運算結果置於B5,則B5之數值即為第10碼檢查碼。

實際在試算表中輸入幾個題目,取得正確的檢查碼

(1) 986-470-526-□
(2) 986-929-945-□
(3) 986-235-536-□
(4) 986-235-543-□

試操作完畢後,更改左上方檔案名稱為「7xxxx-ISBN10」,按下左上角綠色按鈕以儲存退出。

【ISBN-13檢查碼的產生】

1. 不要登出,再次按下左上角的「新增」按鈕,點選「google試算表」,開啟一個空白的文件。

2. 在第一橫列上,從B1開始依序在每一欄輸入前12個號碼978-986-181-728

運算1:按以下公式算出結果,置於儲存格B3

運算2:使用函數MOD,取除以10的餘數,運算結果置於儲存格B4

運算3:使用函數IF,若餘數為0,則檢查碼=0;否則檢查碼為10減掉該餘數。運算結果置於B5,則B5之數值即為第13碼檢查碼。

實際在試算表中輸入幾個題目,取得正確的檢查碼
(1) 978-986-470-666-□
(2) 978-986-477-101-□
(3) 978-957-136-792-□
(4) 978-986-931-045-□

試操作完畢後,更改左上方檔案名稱為「7xxxx-ISBN13」,按下左上角綠色按鈕以儲存退出。

【延伸:實作身份證字號產生器】

參考規則:中華民國國民身分證

1. 首先找出第一碼英文字母所對應的號碼,如下表

字母轉換字元縣市
A10臺北市
B11臺中市
C12基隆市
D13臺南市
E14高雄市
F15新北市
G16宜蘭縣
H17桃園市
I34嘉義市
J18新竹縣
K19苗栗縣
字母轉換字元縣市
M21南投縣
N22彰化縣
O35新竹市
P23雲林縣
Q24嘉義縣
T27屏東縣
U28花蓮縣
V29臺東縣
W32金門縣
X30澎湖縣
Z33連江縣

2. 合併轉換後的號碼,與後面9個號碼,得到共11位的數字。

3. 將每個數字,依序乘以「1、9、8、7、6、5、4、3、2、1、1」再相加。

4. 把加總的號碼除以10,若整除則此身份證號碼為有效。

請思考,如何依照上面ISBN碼檢查與產生驗證碼的方式,實作一個身份證字號產生器?

提示(總共使用到以下幾個函數):
1.英文代號轉換成數字 =LOOKUP(來源,搜尋範圍,對照範圍)
2.無條件捨去取整數 =INT(來源數字)
3.取餘數 =MOD(被除數,除數)
4.如果、就、否則 =IF(判斷條件,若符合則…,若不符合則…)
5.合併多個儲存格的值 =CONCATENATE(欲合併的範圍)


試算表版身分證字號產生器(KK).ods(6k)      埔里國中謝宗翔, 2017年1月10日 上午10:53