java isbn_ISBN(国际标准书号)的校验

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

* 10位标准和13位标准实现(13位标准自2007年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位时,进行的校验,用于2007年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位时,进行的校验,用于2007年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 格式不符合标准");

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值