vlinDone
BlogJava
首頁
新文章
新隨筆
聚合
管理
posts - 33, comments - 17, trackbacks - 0
根據輸入的ISBN號,檢驗ISBN的有效性
1
public
final
class
ISBN
{
2
3
/** */
/**
4
* 根據輸入的ISBN號,檢驗ISBN的有效性。依據 GB/T 5795-2006 和 ISO 2108:2005 ISBN
5
* 10位標準和13位標準實現(13位標準自2007年1月1日開始實行,在此之前采用10位標準)。
6
*
7
*
@param
String isbn:需要進行校驗的ISBN字符串
8
*
@return
true:所輸入的ISBN校驗正確;<br/> false:所輸入的ISBN校驗錯誤
9
*/
10
public
static
boolean
checkISBN(String isbn)
{
11
12
int
count
=
0
;
13
int
checkBitInt
=
0
;
14
15
//
將ISBN數據全取大寫字母
16
//
isbn = isbn.toUpperCase();
17
18
char
[] cs
=
isbn.toCharArray();
19
switch
(isbn.length())
{
20
case
10
:
21
//
****************************************************************
22
//
當ISBN為10位時,進行的校驗,用于2007年1月1日前的出版物
23
//
數據格式:從左至右前9位為ISBN數據,第10位為校驗位
24
//
校驗方法:
25
//
(1) 從左至右將前9位數據從10開始至2進行編號,作為位權
26
//
(2) 將9位數據與各位位權進行加權,并求其9位和(稱為加權和,記作M)
27
//
(3) 第10位校驗位計算方法,校驗位為C:
28
//
M + C ≡ 0 (mod 11)
29
//
C為10時,記作“X”
30
//
****************************************************************
31
32
//
取出前9位數字進行加權和計算
33
for
(
int
i
=
0
; i
<
9
; i
++
)
{
34
//
若前9位數據中有非數字字符,則拋出異常
35
if
(cs[i]
<
'
0
'
||
cs[i]
>
'
9
'
)
{
36
throw
new
ISBNFormatException(
"
ISBN
"
+
isbn
+
37
"
第
"
+
(i
+
1
)
+
"
位中出現非法字符
"
+
cs[i]);
38
}
39
40
int
c
=
cs[i]
-
'
0
'
;
41
//
求加權和
42
count
+=
c
*
(
10
-
i);
43
}
44
45
//
取出校驗位數據0~9和X符合校驗字符要求
46
if
(cs[
9
]
>=
'
0
'
&&
cs[
9
]
<=
'
9
'
)
{
47
checkBitInt
=
cs[
9
]
-
'
0
'
;
48
}
else
if
(cs[
9
]
==
'
X
'
||
cs[
9
]
==
'
x
'
)
{
49
//
校驗位中的“X”表示數據“10”
50
checkBitInt
=
10
;
51
}
else
{
52
//
非0~9或X時拋出異常
53
throw
new
ISBNFormatException(
"
ISBN
"
+
isbn
+
54
"
第 10 位中出現非法字符
"
+
cs[
9
]);
55
}
56
57
//
進行校驗
58
if
((count
+
checkBitInt)
%
11
==
0
)
{
59
return
true
;
//
校驗成功
60
}
else
{
61
return
false
;
//
校驗失敗
62
}
63
case
13
:
64
//
****************************************************************
65
//
當ISBN為13位時,進行的校驗,用于2007年1月1日后的出版物
66
//
數據格式:從左至右前12位為ISBN數據,第13位為校驗位
67
//
校驗方法:
68
//
(1) 從左至右將前12位數的取其奇位數和和偶位數和
69
//
(2) 將偶位數和乘3,并其與奇位數和的和,得加權和
70
//
(3) 第13位校驗位計算方法,校驗位為C:
71
//
M + C ≡ 0 (mod 10)
72
//
****************************************************************
73
74
//
ISBN為13位數據時,前3位目前只能是“978”(已實行)或“979”(暫未實行)
75
if
(
!
isbn.startsWith(
"
978
"
)
&&
!
isbn.startsWith(
"
979
"
))
{
76
throw
new
ISBNFormatException(
"
ISBN-13 格式不符合標準
"
);
77
}
78
//
取出前12位數字進行加權和計算
79
int
countEven
=
0
;
80
int
countOdd
=
0
;
81
for
(
int
i
=
0
; i
<
12
; i
++
)
{
82
int
c
=
cs[i]
-
'
0
'
;
83
//
若前12位數據中有非數字字符,則拋出異常
84
if
(c
<
0
||
c
>
9
)
{
85
throw
new
ISBNFormatException(
"
ISBN
"
+
isbn
+
86
"
第
"
+
(i
+
1
)
+
"
位中出現非法字符
"
+
cs[i]);
87
}
88
//
分別計算奇位數和偶位數的和
89
if
((i
&
0x1
)
==
0
)
{
90
countOdd
+=
c;
91
}
else
{
92
countEven
+=
c;
93
}
94
}
95
//
求加權和
96
count
=
countOdd
+
(countEven
*
3
);
97
98
//
取出校驗位數據
99
if
(cs[
12
]
<
'
0
'
||
cs[
12
]
>
'
9
'
)
{
100
//
校驗位為非0~9字符時,拋出異常
101
throw
new
ISBNFormatException(
"
ISBN
"
+
isbn
102
+
"
第 13 位中出現非法字符
"
+
cs[
12
]);
103
}
104
105
checkBitInt
=
cs[
12
]
-
'
0
'
;
106
//
進行校驗
107
if
((count
+
checkBitInt)
%
10
==
0
)
{
108
return
true
;
//
校驗成功
109
}
else
{
110
return
false
;
//
校驗失敗
111
}
112
default
:
113
//
ISBN為非10位或13位時拋出異常
114
throw
new
ISBNFormatException(
"
ISBN 格式不符合標準
"
);
115
}
116
}
117
}
118
posted on 2008-07-24 08:24
scea2009
閱讀(1408)
評論(4)
編輯
收藏
所屬分類:
網摘
FeedBack:
#
ISBN 9978-7-80170-747-5/J·8[未登錄]
2009-11-14 22:03 |
jelly
我想分辨書的真假。
回復
更多評論
#
ISBN 7-5023-4912-X
2011-09-09 22:46 |
悟道
好fsdfjsd的及風刀霜劍
回復
更多評論
#
ISBN 7-5023-4912-X
2011-09-09 22:46 |
悟道
很好
回復
更多評論
#
ISBN 7-5023-4912-X
2011-09-09 22:46 |
悟道
很好 相當好 真的很好
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
SQL語句效率--摘錄
常用數據表結構修改sql語句(oracle)
時間計算工具類
數據庫連接
根據輸入的ISBN號,檢驗ISBN的有效性
字符串類(java2000_net寫)
<
2009年11月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(1)
給我留言
查看公開留言
查看私人留言
隨筆分類
個人
網摘(6)
隨筆檔案
2008年12月 (2)
2008年8月 (1)
2008年7月 (24)
2008年6月 (1)
2008年5月 (4)
PL/SQL存儲過程與函數
搜索
最新評論
1.?re: 18位號碼身份證校驗碼的計算公式[未登錄]
1@邱麗娟
--李杰
2.?re: 生成 JSON 字符串的工具
ddddddddd
--hls
3.?re: 18位號碼身份證校驗碼的計算公式
340621198706139338
--陸樹軍
4.?re: 生成 JSON 字符串的工具
12121
--11112dacda
5.?re: 18位號碼身份證校驗碼的計算公式
wozhidao
--lixziyu
閱讀排行榜
1.?18位號碼身份證校驗碼的計算公式(25071)
2.?生成 JSON 字符串的工具 (4959)
3.?s:select(2865)
4.?關于 Calendar.getInstance()(1410)
5.?根據輸入的ISBN號,檢驗ISBN的有效性(1408)
評論排行榜
1.?18位號碼身份證校驗碼的計算公式(10)
2.?根據輸入的ISBN號,檢驗ISBN的有效性(4)
3.?生成 JSON 字符串的工具 (2)
4.?時間計算工具類(1)
5.?數據庫連接(0)
Copyright ©2025 scea2009 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
亚洲一级高清在线中文字幕
|
一级特黄色毛片免费看
|
亚洲婷婷在线视频
|
一个人晚上在线观看的免费视频
|
亚洲午夜福利717
|
AV大片在线无码永久免费
|
亚洲第一街区偷拍街拍
|
日本亚洲成高清一区二区三区
|
69av免费视频
|
国产大片免费天天看
|
亚洲国产视频网站
|
avtt亚洲天堂
|
日韩a毛片免费观看
|
亚洲国产精品毛片av不卡在线
|
久久爰www免费人成
|
亚洲第一街区偷拍街拍
|
久久久久亚洲Av无码专
|
亚洲精品高清在线
|
国产日本一线在线观看免费
|
亚洲AV成人噜噜无码网站
|
亚洲手机中文字幕
|
亚洲视频在线观看一区
|
日本免费无遮挡吸乳视频电影
|
两性色午夜视频免费播放
|
日韩在线免费看网站
|
东方aⅴ免费观看久久av
|
国产精品亚洲а∨无码播放不卡
|
亚洲电影日韩精品
|
免费在线观看h片
|
a级特黄毛片免费观看
|
亚洲国产精品久久久久久
|
亚洲av无码不卡私人影院
|
性短视频在线观看免费不卡流畅
|
国产免费牲交视频免费播放
|
亚洲欧洲另类春色校园网站
|
免费毛片在线播放
|
最近中文字幕国语免费完整
|
亚洲综合久久精品无码色欲
|
久久亚洲精品中文字幕
|
亚洲国产精品成人精品无码区在线
|
免费欧洲美女牲交视频
|