Entry

本日のダメプロ - ISBN-10 を ISBN-13 に変換する

2008年02月27日

野暮用でちょろっと作ったもんをぼちぼち紹介。

10桁の ISBN が2007年で廃止されたということで,これからは13桁のISBNになるわけですけれど,手元には10桁の頃の本がゴロゴロしてるもんで,このヒトたちをどうやって管理しようかなあ,と思っているのでした。ISBN を主キーにすることはないけれども,桁数くらいは揃えたい。

自前の管理方法としては PHP なり Java Servlet なりでウェブアプリにしちゃうのが手っ取り早いので,必要そうな機能からぼちぼち作成。とりあえず,10桁→13桁の変換モジュールを作ることにしました。こんなもんサーバに飛ばしてどうこうするもんじゃないので,JavaScript でつらつらと。

で,作ってみたのがこれ。

<html>
<head>
<script type="text/javascript" language="JavaScript"><!--
window.onload = function() {
  var btnNewISBN = document.getElementById("btnNewISBN");
  btnNewISBN.onclick = function() {
    var txtOldISBN = document.getElementById("txtOldISBN");
    var result = document.getElementById("result");
    if (txtOldISBN) {
      var strOldISBN = txtOldISBN.value;
      if (checkISBN10(strOldISBN)) {
        var strNewISBN = "978" + strOldISBN.substring(0, 9);
        strNewISBN += getCheckDigit(strNewISBN);
        // set result
        result.appendChild(document.createTextNode(strNewISBN));
        result.appendChild(document.createElement("br"));
      } else {
        result.appendChild(document.createTextNode("parse error!"));
        result.appendChild(document.createElement("br"));
      }
    }
  }
}

function checkISBN10(isbn) {
  var bRet = true;
  if (!isbn.match(/^[0-9]{9}.$/g)) {
    bRet = false;
  }
  return bRet;
}

function getCheckDigit(isbn) {
  var iOdd = 0;
  var iEven = 0;
  for (var i = 0; i < isbn.length; i++) {
    var num = isbn.substring(i, i + 1) - 0;
    if (((i+1) % 2) == 0) {
      iEven += num;
    } else {
      iOdd += num;
    }
  }
  var strTotal = ((iOdd * 1) + (iEven * 3)) + "";
  var iCheckDigit
    = 10
    - (strTotal.substring(strTotal.length - 1, strTotal.length) - 0);
  iCheckDigit = (iCheckDigit == 10) ? 0 : iCheckDigit;

  return iCheckDigit;
}
//--!></script>
  <title>title</title>
</head>
<body>
  <div>
    <label>ISBN-10</label>
    <input type="textbox" id="txtOldISBN" value="" maxlength="10">
    <input type="button" id="btnNewISBN" value="CONVERT">
  </div>
  <div id="result"></div>
</body>
</html>

まぁ,こんなんなる,と。

ただそれだけ。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN