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