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