校验码是什么

更新时间:2023-03-06 09:32:31 阅读: 评论:0

小乌龟怎么养-完整的爱

校验码是什么
2023年3月6日发(作者:如何设置ip地址)

图书ISBN编码概述及java⼯具类校验

前⾔:系统⽤图书的ISBN编码作为查询条件,由于套装书或其它情况导致ISBN编码可能重复,针对

这种情况图书馆⾃定义了⼀批ISBN编码,因此需要区分是否为⾃定义的ISBN编码。

由于ISBN编码有⼀套对应的⽣成规则,并且各个图书馆的⾃定义编码不相同,所以准备利⽤ISBN编

码⽣成规则使⽤java程序处理

直接上代码有兴趣的可以看看下边的内容:

;

4j;

tUtils;

Utils;

nFormatConversionException;

n;

/**

*@authorruqiang

*@version1.0.0

*@className:IsbnUtil

*@DescriptionISBN编码校验⼯具类

*@create2019/11/26

*/

@Slf4j

publicclassIsbnUtil{

/**

*所需值

*/

privatestaticfinalStringFORMAT_TEN="^[0-9]{%s}[0-9X]{1}$";

privatestaticfinalStringFORMAT_THIRTEEN="^[0-9]{%s}$";

privatestaticfinalIntegerZERO=0;

privatestaticfinalIntegerONE=1;

privatestaticfinalIntegerTWO=2;

privatestaticfinalIntegerTHREE=3;

privatestaticfinalIntegerNINE=9;

privatestaticfinalIntegerTEN=10;

privatestaticfinalIntegerELEVEN=11;

privatestaticfinalIntegerTHIRTEEN=13;

privatestaticfinalStringX="X";

publicstaticBooleancheckIsbn(Stringisbn){

//获取计算加权和所需要的值

Stringsubstring=ing(ZERO,()-ONE);

//加权和S

Integers=ZERO;

//由于ISBN,10位和13位校验⽅法不相同,先进⾏区分

if(s((FORMAT_TEN,NINE),isbn)){

//获取⽐较值并转化为Integer

Integercomparison=null;

StringcomparisonStr=null;

try{

comparison=nt(ing(()-1));

}catch(NumberFormatExceptione){

comparisonStr=X;

}

//转化为Integer数组

Integer[]isbnArr;

try{

isbnArr=(Integer[])t((""),);

}catch(UnknownFormatConversionExceptione){

("ISBN编码转化Integer数组失败:{}",e);

("ISBN编码转化Integer数组失败:{}",e);

returnfal;

}

//递减值j

Integerj=TEN;

//计算加权和:即将ISBN号码前9位数字分别乘以10,9,8,7,6,5,4,3,2,然将它们相加,得到加权和

for(inti=ZERO;i<;i++,j--){

s=isbnArr[i]*j+s;

}

//取余数M

Integerm=s%ELEVEN;

//计算校验码N

IntegerN=ELEVEN-m;

if(mpty(comparisonStr)){

(TEN)?true:fal;

}el{

(N)?(comparison)?true:fal:(N)?true:fal;

}

}

if(s((FORMAT_THIRTEEN,THIRTEEN),isbn)){

//获取⽐较值并转化为Integer

Integercomparison=nt(ing(()-1));

//转化为Integer数组

Integer[]isbnArr=(Integer[])t((""),);

//计算加权和:⽤1分别乘ISBN的前12位中的奇数位,⽤3乘以偶数位,然后将两者相加,即得到加权和

for(inti=ZERO;i<;i++){

s=i%TWO==ZERO?isbnArr[i]*ONE+s:isbnArr[i]*THREE+s;

}

//取余数M

Integerm=s%TEN;

//计算校验码N

IntegerN=TEN-m;

(TEN)?(ZERO)?true:fal:(N)?true:fal;

}

returnfal;

}

publicstaticvoidmain(String[]args){

n(("10位测试结果:%s",checkIsbn("7309045475")));

n(("13位测试结果:%s",checkIsbn("9787115275790")));

}

}

计算⽅式

ISBN书号校验码的计算⽅法

⼀、10位书号校验码的计算⽅法

10位书号校验码只有⼀位,从0到10,10由X代替。其计算⽅法为:

第⼀步计算加权和:即将ISBN号码前9位数字分别乘以10,9,8,7,6,5,4,3,2,然将它们相加,得到加权和(设该加权和为S);

第⼆步计算余数:即将第⼀步得到的和(S)除以11,取其余数(设该余数为M);

第三步计算校验码:⽤11减去第⼆步得到的余数(M),所得之差就是计算校验码的基础(N)。

【说明】如果所得之差N为10,校验码是字母X;如果所得之差N为1,校验码是数字0;如果所得之差N为其他数字,则校验码就是该

数字。

【举例】假设某ISBN号码前9位是:7-309-04547,其校验码计算⽅法如下:

第⼀步:计算加权和(S):S=7×10+3×9+0×8+9×7+0×6+4×5+5×4+4×3+7×2=226

第⼆步:计算余数(M):M=226÷11余6

第三步:计算校验码(N):N=11?6=5

校验码为5。

⼆、13位书号校验码的计算⽅法

13位ISBN的最后⼀位校验位的加权算法与10位ISBN的算法不同。具体计算⽅法为:

第⼀步计算加权和:⽤1分别乘ISBN的前12位中的奇数位,⽤3乘以偶数位,然后将两者相加,即得到加权和(设该加权和为S);

第⼆步计算余数:即将第⼀步得到的加权和除以10,取其余数(设该余数为M);

第三步计算校验码:即⽤10减去第⼆步得到的余数,所得之差就是计算校验码的基础(N)。

【说明】如果所得之差N为10,则校验码取0。

【举例】假设某13位ISBN号码前12位是:987-7-309-04547

第⼀步:计算加权和(S):S=9×1+8×3+7×1+7×3+3×1+0×3+9×1+0×3+4×1+5×3+4×1+7×3=117

第⼆步:计算余数(M):M=117÷10余数为7

第三步:计算校验码(N):N=10?7=3

故本书的第13位ISBN的校验码是3。

ISBN图书编码简介:

国际标准书号(InternationalStandardBookNumber),简称ISBN,是专门为识别图书等⽂献⽽设计的国际编号。

采⽤ISBN编码系统的出版物有:图书、⼩册⼦、缩微出版物、盲⽂印刷品等。

2007年1⽉1⽇前,ISBN由10位数字组成,分四个部分:

1.组号(国家、地区、语⾔的代号)

2.出版者号

3.书序号

4.检验码

2007年1⽉1⽇起,实⾏新版ISBN,新版ISBN由13位数字组成,分为5段,即在原来的10位数字前加上3位EAN(欧洲商品编号)图书产

品代码“978”。在联机书⽬中ISBN可以作为⼀个检索字段,从⽽为⽤户增加了⼀种检索途径。

旧版,即2007年1⽉1⽇前

第⼀组号码段,组号(国家、地区、语⾔的代号)

最短的是⼀位数字,最长的达五位数字如不丹:99936。

代码含义代表国家

0和1代表英语英国、美国、澳⼤利亚、加拿⼤等

2代表法语法国、瑞⼠、⽐利时等

3代表德语德国、奥地利等

4代表⽇本⽇本

5代表俄语俄罗斯

7代表中国中国

第⼆组号码段,是出版社代码,由其⾪属的国家或地区ISBN中⼼分配,允许取值范围为2-5位数字。

第三组号码是书序码,由出版社⾃⼰给出,书序号是定长的数字9,减去组号、出版社代码所占的位

数,就是书序码的位数。最短的⼀位,最长的六位。

第四组号码段,是校验码,其数值由前九位数字依次以10~2加权之和并以11为模计算得到。

校验⽅式

将ISBN前九位数字依序分别乘以从10到2的数⽬,将其乘积相加,总和⽤11去除;若⽆余数则检查号码为“0”;若有余数,则以11减去

余数,所得差数即为检查号,若差数为10,则以代表罗马数字10的“X”来表⽰。

新版,即2007年1⽉1⽇起,在最前⾯多了⼀组EAN

EAN:EuropeanArticleNumber(欧洲商品号),国际标准书号中⼼于2004年决定在国际标准书号的基础上再添加⼀组三位数字在最

前,即将现有的10位书号前⾯加上前缀号“978”或“979”及重新计算稽核号,以转换为新的13位格式,与13位欧洲商品编码相同。该

计划于2007年1⽉1⽇实施。

转化:

ISBN-10与ISBN-13之间的相互转换算法

1.从ISBN-10转换为ISBN-13

下⾯以ISBN7-302-12260-1为例,介绍从ISBN-10转换为ISBN-13的具体步骤。

(1)从ISBN-10中去除校验码(即最后⼀位),得到⼀个9位数字7-302-12260

(2)在这个9位数字之前添加前缀978,得到12位数字978-7-302-12260

(3)使⽤模为10的校验码计算⽅法重新计算校验码。使⽤从第2步得到的12位数字,每位乘以相应的加权因⼦。将结果相加,得和为81

将这个和除以模数10,得余数为1,⽤标准模数减去余数就可以得出校验码。这⾥10减1得9把校验码添加到由第2步⽣成的12位数字后,

于是,转换成的ISBN-13就是978-7-302-12260-9

具体算法如下:91+73+81+73+31+03+21+13+21+23+61+03=81

81/10=8,余数为1,10-1=9

注意:这个公式有⼀个例外,当余数为0时,校验码即为0。

2.从以978打头的ISBN-13转换成ISBN-10

注意:只有前级为978的ISBN-13才有对应的ISBN-10。

下⾯以转换成的ISBN978-7-302-12260-9为例,转换回ISBN-10。

(1)从ISBN-13中删除前缀978和校验码,得到⼀个9位数字,即为7-302-12260

(2)重新计算校验码。使⽤从上⾯第1步中得到的9位数字,将每位数字与表2中相应的加权因⼦相乘。

将乘积相加,得和为153将这个和除以11,得余数为10,⽤11减去这个余数,结果就是校验码。这⾥,11减去10得1,把校验码添加到

从第1步中得到的9位数字的后⾯,于是,转换成的ISBN-10就是7-302-12260-1

具体算法如下:710+39+08+27+16+25+24+63+0*2=153

153/11=13,余数为10,11-10=1

注意:如果校验码的值为10,则应⽤罗马数字X表⽰

本文发布于:2023-03-06 09:32:30,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678066351155977.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:校验码是什么.doc

本文 PDF 下载地址:校验码是什么.pdf

下一篇:返回列表
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26 专利检索|