抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > java验证13位数书号_ISBN(国际标准书号)的校验

java验证13位数书号_ISBN(国际标准书号)的校验

时间:2022-05-06 23:03:58

相关推荐

publicfinalclassISBN {/*** 根据输入的ISBN号,检验ISBN的有效性。依据 GB/T 5795- 和 ISO 2108: ISBN

* 10位标准和13位标准实现(13位标准自1月1日开始实行,在此之前采用10位标准)。

*

*@paramString isbn:需要进行校验的ISBN字符串

*@returntrue:所输入的ISBN校验正确;

false:所输入的ISBN校验错误*/publicstaticbooleancheckISBN(String isbn) {intcount=0;intcheckBitInt=0;//将ISBN数据全取大写字母//isbn = isbn.toUpperCase();char[] cs=isbn.toCharArray();switch(isbn.length()) {case10://****************************************************************//当ISBN为10位时,进行的校验,用于1月1日前的出版物//数据格式:从左至右前9位为ISBN数据,第10位为校验位//校验方法://(1) 从左至右将前9位数据从10开始至2进行编号,作为位权//(2) 将9位数据与各位位权进行加权,并求其9位和(称为加权和,记作M)//(3) 第10位校验位计算方法,校验位为C://M + C ≡ 0 (mod 11)//C为10时,记作“X”//****************************************************************//取出前9位数字进行加权和计算for(inti=0; i<9; i++) {//若前9位数据中有非数字字符,则抛出异常if(cs[i]'9') {thrownewISBNFormatException("ISBN"+isbn+"第"+(i+1)+"位中出现非法字符"+cs[i]);

}intc=cs[i]-'0';//求加权和count+=c*(10-i);

}//取出校验位数据0~9和X符合校验字符要求if(cs[9]>='0'&&cs[9]<='9') {

checkBitInt=cs[9]-'0';

}elseif(cs[9]=='X'||cs[9]=='x') {//校验位中的“X”表示数据“10”checkBitInt=10;

}else{//非0~9或X时抛出异常thrownewISBNFormatException("ISBN"+isbn+"第 10 位中出现非法字符"+cs[9]);

}//进行校验if((count+checkBitInt)%11==0) {returntrue;//校验成功}else{returnfalse;//校验失败}case13://****************************************************************//当ISBN为13位时,进行的校验,用于1月1日后的出版物//数据格式:从左至右前12位为ISBN数据,第13位为校验位//校验方法://(1) 从左至右将前12位数的取其奇位数和和偶位数和//(2) 将偶位数和乘3,并其与奇位数和的和,得加权和//(3) 第13位校验位计算方法,校验位为C://M + C ≡ 0 (mod 10)//****************************************************************//ISBN为13位数据时,前3位目前只能是“978”(已实行)或“979”(暂未实行)if(!isbn.startsWith("978")&&!isbn.startsWith("979")) {thrownewISBNFormatException("ISBN-13 格式不符合标准");

}//取出前12位数字进行加权和计算intcountEven=0;intcountOdd=0;for(inti=0; i<12; i++) {intc=cs[i]-'0';//若前12位数据中有非数字字符,则抛出异常if(c<0||c>9) {thrownewISBNFormatException("ISBN"+isbn+"第"+(i+1)+"位中出现非法字符"+cs[i]);

}//分别计算奇位数和偶位数的和if((i&0x1)==0) {

countOdd+=c;

}else{

countEven+=c;

}

}//求加权和count=countOdd+(countEven*3);//取出校验位数据if(cs[12]'9') {//校验位为非0~9字符时,抛出异常thrownewISBNFormatException("ISBN"+isbn+"第 13 位中出现非法字符"+cs[12]);

}

checkBitInt=cs[12]-'0';//进行校验if((count+checkBitInt)%10==0) {returntrue;//校验成功}else{returnfalse;//校验失败}default://ISBN为非10位或13位时抛出异常thrownewISBNFormatException("ISBN 格式不符合标准");

}

}

}

如果觉得《java验证13位数书号_ISBN(国际标准书号)的校验》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。