天文学的数
http://www2d.biglobe.ne.jp/~st886ngw/hasegawa/cd-ver2.htmより抜粋
出版者記号の範囲 書名記号の総数
00−19 1000000
200−699 100000
7000−8499 10000
85000−89999 1000
900000−949999 100
9500000−9999999 10
この出版社記号の部分をPerlで表記するとこんな感じ。
@publisher_code = (); push @publisher_code,(00..19); push @publisher_code,(200..699); push @publisher_code,(7000..8499); push @publisher_code,(85000..89999); push @publisher_code,(900000..949999); push @publisher_code,(9500000..9999999);
で、実際に理論上どれだけ存在できるかを確認してみた。
A | B | 含まれる数 |
---|---|---|
00 | 19 | 20 |
200 | 699 | 500 |
7000 | 8499 | 1,500 |
85000 | 89999 | 5,000 |
900000 | 949999 | 50,000 |
9500000 | 9999999 | 500,000 |
合計 | 557,020 |
ごじゅうごまんななせんにじゅう。
ISBNが10桁から13桁に移行したのは、この出版社記号が(一部の国で)枯渇し始めたからだと言うけれど、どんだけ出版社作ってるねん米国と英国! 0と1合わせて百十万以上の出版社が作れるねんで、それすら足りないとかどうなっとんねん。まあ、英語の本やったらなんでもええみたいやけどそれさっぴいても作りすぎやろう。ドメインみたいに「とりあえず出版社記号取ってそれから考える」とかやってんじゃなかろうな。
んでまあ、もし完全なISBN業者のリストを作ることを考えるとすると、時間をかけて有効な出版社コードをしらみつぶしにしていくのが基本になるかなあ。
で、あらかじめ有効な出版社コードをリストにしていくことを考えると、やっとれるかバーローと言う結論になる。
そこで次善の策は、有効な出版社コードを入れると、一つ上の有効な出版社コードを返す関数を作成することだろうな。
sub next_publisher_code { my $now = shift; $now or return '00'; my $next = $now; $next += 1; $next == 20 and $next *= 10; $next == 700 and $next *= 10; $next == 8500 and $next *= 10; $next == 90000 and $next *= 10; $next == 950000 and $next *= 10; $next == 10000000 and return ''; return sprintf "%02d", $next; }
まあ、負荷を考えて10分に一回のペースで検索していくとして、5,500,000分=3,819日=約10年と半年の時間が必要になる。これこそやっとれるかバーローである。
実際にはそれぞれのグループの最後の方は未登録の領域がずっと続いているんだろうから、一度未登録が出たらそのグループを卒業すると言うやり方と、必要な時に取りに行くのを併用するのがベストかも知れないが。