ISBN(国际标准书号)的校验

更新时间:2023-05-23 07:10:07 阅读: 评论:0

腐蚀与防护-大蒜的价值

ISBN(国际标准书号)的校验
2023年5月23日发(作者:道歉信模板)public class Test {



public static void main(String[] args) {

n("9787302155638 " + SBN("9787302155638"));

n("7564105607 " + SBN("7564105607"));

n("730213880X " + SBN("730213880X"));

n("7302138800 " + SBN("7302138800"));

n("979 " + SBN("979"));

try {

n(SBN("977"));

}catch(Exception e) {

n("977 " + sage());

}

try {

n(SBN("123456545"));

}catch(Exception e) {

n("123456545 " + sage());

}

}

}









public final class ISBN {



/**

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

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

*

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

* @return true:所输入的ISBN校验正确;
fal:所输入的ISBN校验错误

*/

public static boolean checkISBN(String isbn) {



int count = 0;

int checkBitInt = 0;



// 将ISBN数据全取大写字母

//isbn = rCa();



char[] cs = Array();

switch (()) {

ca 10:

// ****************************************************************

// 当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 (int i = 0; i < 9; i++) {

// 若前9位数据中有非数字字符,则抛出异常

if (cs[i] < '0' || cs[i] > '9') {

throw new ISBNFormatException("ISBN " + isbn +

" 第 " + (i + 1) + " 位中出现非法字符 " + cs[i]);

}



int c = cs[i] - '0';

// 求加权和

count += c * (10 - i);

}



// 取出校验位数据0~9和X符合校验字符要求



if (cs[9] >= '0' && cs[9] <= '9') {

checkBitInt = cs[9] - '0';

} el if (cs[9] == 'X' || cs[9] == 'x') {

// 校验位中的“X”表示数据“10”

checkBitInt = 10;

} el {

// 非0~9或X时抛出异常

throw new ISBNFormatException("ISBN " + isbn +

" 第 10 位中出现非法字符 " + cs[9]);

}



// 进行校验

if ((count + checkBitInt) % 11 == 0) {

return true; // 校验成功

} el {

return fal; // 校验失败

}

ca 13:

// ****************************************************************

// 当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 (!With("978") && !With("979")) {

throw new ISBNFormatException("ISBN-13 格式不符合标准");

}

// 取出前12位数字进行加权和计算

int countEven = 0;

int countOdd = 0;

for (int i = 0; i < 12; i++) {

int c = cs[i] - '0';

// 若前12位数据中有非数字字符,则抛出异常

if (c < 0 || c > 9) {

throw new ISBNFormatException("ISBN " + isbn +

" 第 " + (i + 1) + " 位中出现非法字符 " + cs[i]);

}

// 分别计算奇位数和偶位数的和

if ((i & 0x1) == 0) {

countOdd += c;

} el {

countEven += c;

}

}

// 求加权和

count = countOdd + (countEven * 3);



// 取出校验位数据

if (cs[12] < '0' || cs[12] > '9') {

// 校验位为非0~9字符时,抛出异常

throw new ISBNFormatException("ISBN " + isbn

+ " 第 13 位中出现非法字符 " + cs[12]);

}



checkBitInt = cs[12] - '0';

// 进行校验

if ((count + checkBitInt) % 10 == 0) {

return true; // 校验成功

} el {

return

fal; // 校验失败

}

default:

// ISBN为非10位或13位时抛出异常

throw new ISBNFormatException("ISBN 格式不符合标准");

}

}

}









public class ISBNFormatException extends RuntimeException {



private static final long rialVersionUID = 1L;



public ISBNFormatException() {

super("ISBN Error ...");

}



public ISBNFormatException(String arg0) {

super(arg0);

}

}



转载须注明A

技艺高超的成语-财务交接单模板

ISBN(国际标准书号)的校验

本文发布于:2023-05-23 07:10:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/1684797007175412.html

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

本文word下载地址:ISBN(国际标准书号)的校验.doc

本文 PDF 下载地址:ISBN(国际标准书号)的校验.pdf

标签:isbn
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|