ISBNコードの10桁13桁相互変換ルーチンを作ってみた 〜その5〜

グループコードが2桁のものまで対応してみた

今回追加になったグループ

    1. チェコスロバキア
    2. インド(93:India - no ranges fixed yetを除く)
    3. ノルウエー
    4. ポーランド
    5. スペイン
    6. ブラジル
    7. セルビア・モンテネグロ
    8. デンマーク
    9. イタリア語圏
    10. 韓国
    11. オランダおよびベルギーのフランドル地域(フランダース
    12. スウェーデン
    13. 国際出版者、ヨーロッパ共同体機構(Unesco、EU)

前回迄との処理の違い

グループコード毎に、何文字目から何文字目までがいくつだと、何桁編集という処理を列記していたが、今回より編集桁数の区切り毎にグループコード + 出版者コード + 9桁に足りない分を9で埋めたテーブルを作成して参照するように変更した
ようはデータとロジックを分割した

テスト方法

丸々入れ替えたので、一通りの(日本も含めて)テストを行った

スプリプトのダウンロード先

http://natu.blue.coocan.jp/data/naisbn.js

動作確認用テストページのURL

入力フォームにグループコード(0〜5、または7、80〜92) + 出版者記号 + 書名記号の9桁を入力する
http://natu.blue.coocan.jp/CheckISBN.htm

問題点

http://www.isbn-international.org/converter/ranges.htmのソースから定義テーブルを作成しているが、http://www.isbn-international.org/converter/ranges.jsで動的にページを作成しているものだから、いつ変更になったかが分からないです。
一定の期間ごとにスプリプトをダウンロードして前回のスプリプトと異なっていたらテーブルの再作成とかってスマートではないなぁ

定義テーブルの作成方法

以下、長いので興味のある人だけ

〜 略 〜
<TD align=middle>0</TD>
<TD>English speaking area</TD>
<TD noWrap align=middle>00 - 09<BR>10 - 19<BR>200 - 699<BR>7000 - 8499<BR>85000 - 89999<BR>900000 - 949999<BR>9500000 - 9999999</TD></TR>
<TR>
<TD align=middle>1</TD>
<TD>English speaking area</TD>
<TD noWrap align=middle>00 - 09<BR>100 - 399<BR>4000 - 5499<BR>55000 - 86979<BR>869800 - 998999</TD></TR>
<TR>
〜 略 〜

http://www.isbn-international.org/converter/ranges.htmのソースから

〜 略 〜
0,09
0,19
0,699
0,8499
0,89999
0,949999
0,9999999
1,09
1,399
1,5499
1,86979
1,998999
〜 略 〜

こんな形に編集して拡張子を.txtにしてExcelで読み込み(csvだと前ゼロが消えるので)、文字列の連結、文字数計算を行い、クリップボード

A B C D E
1 0 09 009999999 1 2
2 0 19 019999999 1 2
3 0 699 069999999 1 3
4 0 8499 084999999 1 4
5 0 949999 094999999 1 5

〜 略 〜
エディタに貼り付け

〜 略 〜
009999999		1	2
019999999		1	2
069999999		1	3
084999999		1	4
094999999		1	5
〜 略 〜

色々編集して

function tblMake(){
	_ranges=[["019999999","1","2"],
		["069999999","1","3"],
		["084999999","1","4"],
		["089999999","1","5"],
		["094999999","1","6"],
		["099999999","1","7"],
〜 略 〜
		["929999999","2","6"]];

	flgTblMake = 1;
	_TblL = _ranges.length;
}

各出版者コード桁数が変わる境目、グループコードの桁数、各出版者コード桁数の二次元テーブルにします
編集したいISBNコードのグループコード + 出版者コードで、テーブルの先頭から順に見て行って、編集したいISBNコード<=境目の関係になったところで、インデックス番目の桁数でISBNコードを分割します