王劍波,鐘勁松
(湖南教育出版社,長沙410007)
基于Excel實現(xiàn)書號校驗碼的驗證
王劍波,鐘勁松
(湖南教育出版社,長沙410007)
本文利用Excel軟件實現(xiàn)書號(ISBN 10,13位)校驗碼的驗證,并給出了具體的流程圖和主要算法語句。本系統(tǒng)可批量驗證書號和校驗碼的正確性,提高了出版工作的效率。
Excel;ISBN;校驗碼
書號,即國際標(biāo)準(zhǔn)書號(Intetnationa1 Standatd Book Numbet),簡稱ISBN,是國際通用的圖書或獨立的出版物代碼,是出版物唯一的身份標(biāo)識,是出版物發(fā)行和流通的國際通行證,其重要性相當(dāng)于一個人的身份證和護照。
國際標(biāo)準(zhǔn)書號號碼由13位數(shù)字組成,并以四個連接號或四個空格加以分割,每組數(shù)字都有固定的含義。2007年1月1日之前圖書的標(biāo)準(zhǔn)書號是10位,2007年1月1日以后,所有的10位書號圖書前加上“978”后重新計算校驗碼,轉(zhuǎn)換成13位書號的形式。圖1為某圖書的書號,書號中的具體段的含義如下:
第一組:978;
第二組:國家、語言或區(qū)位碼;
圖1 某圖書書號條碼
第三組:出版社代號,由國家或地區(qū)的國際標(biāo)準(zhǔn)書號分配中心分給出版社;
第四組:圖書編號,由出版社具體給出;第五組:校驗碼,只有一位,從0到9。
ISBN的最后一位數(shù)字是校驗碼(check-digit),校驗碼用來檢驗前面數(shù)字是否準(zhǔn)確,這也是辨別盜版書籍、識別真假、保護知識產(chǎn)權(quán)的一種有效方法。
3.1圖書書號10位校驗碼的算法
第一步計算加權(quán)和:將ISBN號碼前9位數(shù)字分別乘以10,9,8,7,6,5,4,3,2,然后將它們相加,得到加權(quán)和(設(shè)該加權(quán)和為S);
第二步計算余數(shù):將第一步得到的和(S)除以11,取其余數(shù)(設(shè)該余數(shù)為M);
第三步計算校驗碼:用11減去第二步得到的余數(shù)(M),所得之差就是校驗碼(N)。
說明:校驗碼只有一位,從0到10,其中余數(shù)是10時校驗碼用X代替。
[例1]書號為7-5064-2595-5的圖書校驗碼計算方法如圖2所示。
圖2 圖書校驗碼計算方法(例1)
3.2圖書書號13位校驗碼的算法
第一步計算加權(quán)和:用1分別乘ISBN的前12位中的奇數(shù)位,用3乘以偶數(shù)位,然后將兩者相加,即得到加權(quán)和(設(shè)該加權(quán)和為S);
第二步計算余數(shù):即將第一步得到的加權(quán)和除以10,取其余數(shù)(設(shè)該余數(shù)為M);
第三步計算校驗碼:即用10減去第二步得到的余數(shù),所得之差就是校驗碼。同樣,余數(shù)為10時校驗碼用X表示。
[例2]書號為978-7-5064-2595-7的圖書校驗碼的計算方法如圖3所示。
圖3 圖書書號校驗碼計算方法(例2)
圖書的校驗碼的驗證框圖如圖4所示。
圖4 圖書書號校驗碼驗證框圖
利用Exce1實現(xiàn)書號校驗碼驗證的主要代碼如下:
第一步:標(biāo)準(zhǔn)化輸入的書號,去掉單元格A3中書號的“-”和空格””符號。
B3=SUBSTITUTE((SUBSTITUTE(A3,"-","")),"","")第二步:判斷B3單元格中書號的位數(shù),如果書號的位數(shù)不是10或13,且書號的前9位或者前12位必須為數(shù)字,返回數(shù)值“0”,否則,返回數(shù)值“1”。
=IF(ISERROR(B3*1),0,IF(OR(LEN(B3)=10,LEN(B3)= 13),1,0))
第三步:如果B3單元格返回值為“1”,表示書號的位數(shù)正確,且由數(shù)字組成,否則顯示書號錯誤。接下來對書號校驗碼進行計算,計算時先判斷書號的長度,如果為10位,則采用10位校驗碼的計算方法;如果為13位,則采用13位校驗碼的計算方法。
//ISBN10位數(shù)的校驗碼計算方法
=IF((11-MOD(SUMPRODUCT(MID(B3,{1;2;3;4;5;6;7;8;9},1)*({10;9;8;7;6;5;4;3;2})),11))=10,”X”,(11-MOD(SUMPRODUCT(MID(B3,{1;2;3;4;5;6;7;8;9},1)*({10;9;8; 7;6;5;4;3;2})),11))
//ISBN13位數(shù)的校驗碼計算方法MOD10
=10-MOD(SUMPRODUCT(MID(B3,{1;2;3;4;5;6;7;8;9;10;11;12},1)*({1;3;1;3;1;3;1;3;1;3;1;3})),10)
第四步:比較單元格C3中的數(shù)字或者符號,是否與B3最后一個數(shù)字或者字母相同。如果相同,則返回“校驗碼正確”,否則返回“校驗碼錯誤”,并把結(jié)果顯示在單元格D3中。
//比較結(jié)果,計算結(jié)果是否與單元格B3最后一位數(shù)字或符號相同
=IF(IF(RIGHT(B3,1)="X",VALUE(C3)=10),
"校驗碼正確",IF(C3=VALUE(RIGHT(B3,1)),"校驗碼正確","校驗碼錯誤"))
本系統(tǒng)不僅可以批量地檢測圖書的檢驗碼,還可以生成新的正確的校驗碼,如圖5所示。
圖5 圖書書號校驗碼核對
現(xiàn)代社會高度信息化,作為出版行業(yè)的從業(yè)者需要熟悉使用Exce1,使用Exce1編制一些簡單的應(yīng)用程序來提高工作效率。譬如開發(fā)圖書成本的計算,書號、刊號校驗碼的驗證和計算小程序等等。充分利用這些小程序,高效、準(zhǔn)確地完成任務(wù),擠出更多的時間來完成創(chuàng)造性的任務(wù)。
10.3969/j.issn.1673-0194.2016.13.042
F273
A
1673-0194(2016)13-0082-03
2016-02-23