<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 33,  comments - 17,  trackbacks - 0
      1public 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 | 悟道
    # ISBN 7-5023-4912-X
    2011-09-09 22:46 | 悟道
    很好 相當(dāng)好 真的很好  回復(fù)  更多評(píng)論
      

    <2008年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    PL/SQL存儲(chǔ)過程與函數(shù)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲av永久无码精品天堂久久| 亚洲精品美女久久久久久久| 亚洲αⅴ无码乱码在线观看性色| 一区二区免费电影| 人与禽交免费网站视频| 免费少妇a级毛片| 99久久亚洲综合精品成人网| 亚洲熟妇无码AV| 国产偷伦视频免费观看| 全免费A级毛片免费看网站| 国产精品亚洲A∨天堂不卡| 亚洲中文字幕无码爆乳| 国产又黄又爽胸又大免费视频| 野花高清在线观看免费3中文 | 免费在线观看h片| 亚洲成a人无码av波多野按摩| 亚洲黄色片在线观看| 无遮挡呻吟娇喘视频免费播放| 最近2019年免费中文字幕高清| 亚洲国产精品自产在线播放| 亚洲一卡二卡三卡四卡无卡麻豆| 亚洲精品黄色视频在线观看免费资源 | 成人午夜18免费看| 亚洲国产精品特色大片观看完整版 | 男的把j放进女人下面视频免费| 在线不卡免费视频| 亚洲AV电影院在线观看| 国产亚洲福利一区二区免费看| www视频在线观看免费| 国产亚洲精品精品国产亚洲综合| 亚洲国产视频久久| 七色永久性tv网站免费看| 国产精品久免费的黄网站| 亚洲日韩中文字幕天堂不卡| 久久国产美女免费观看精品| 暖暖免费高清日本中文| 亚洲国产成人久久三区| 国产在线一区二区综合免费视频| 亚洲?v无码国产在丝袜线观看| 77777午夜亚洲| 8x8×在线永久免费视频|