ISBNモロモロ

サンプルコード

my $isbn9 = '457606017';
print "$isbn9\n";
my $digit = calc_check_digit($isbn9);
my $isbn = $isbn9.$digit;
print "$isbn9\-$digit\n";
print isbn2hyphen($isbn);

実行結果

457606017
457606017-1
4-576-06017-1

ちなみにこのISBNコードは、ファントム

9桁のISBNから、チェックデジットを計算する

sub calc_check_digit {
	my $isbn = shift; # 引数には、9桁の数値を期待している。
	$isbn =~ s/\D//g; # ハイフンだとかチェックデジットのXとかは削除するよ。。
	chop $isbn while ( 9 < length $isbn ); # チェックデジットは削除するよ。
	# さて、これで正確に9桁の数値になった。
	my $product = 0; # 合計を計算しよう。
	my @digit = split //, $isbn; # ISBNを各桁に分解してコピー。
	foreach my $weight ( 2..10 ) {
		# 各桁に分解して重み付けをかけて合計するよ。
		$product += $weight * pop @digit;
	}
	# この合計を11で割った余りを、さらに11から引いた値。それがチェックデジットだ。
	# もし10だったらそれはXね。
	my $check_digit = (qw(X 9 8 7 6 5 4 3 2 1 0))[($product % 11)-1];
	return $check_digit;
}

10桁のハイフンなしISBNにハイフンを復元する。

sub isbn2hyphen {
	my $isbn = shift ; # 引数には、10桁の数値を期待している。
	my $code = substr $isbn, 1, 2; # 出版社コードの頭二つを取得する。
	my $digit = 2; # 出版社コードの桁数を設定
	if ( $code < 20 ) {
		# 何もしない。
	} elsif ( $code < 70 ) {
		$digit = 3; # 出版社コードの桁数は3
	} elsif ( $code < 85 ) {
		$digit = 4; # 出版社コードの桁数は4
	} elsif ( $code < 90 ) {
		$digit = 5; # 出版社コードの桁数は5
	} elsif ( $code < 95 ) {
		$digit = 6; # 出版社コードの桁数は6
	} else {
		$digit = 7; # 出版社コードの桁数は7
	}
	# ハイフンを入れたISBNコードを作ります。
	my @isbn = split //, $isbn;
	my $result = shift @isbn; # 国コード
	$result .= '-'; # ハイフンを追加
	map { $result .= shift @isbn } ( 1..$digit ); # 規定の桁を追加。
	$result .= '-'; # ハイフンを追加
	map { $result .= shift @isbn } ( 1..(8-$digit) ); # 規定の桁を追加。
	$result .= '-'; # ハイフンを追加
	$result .= shift @isbn; # チェックデジットを追加
	return $result;
}

日本語のニュアンス

カウンターにいた時。
バイトさんにお客さんが話し掛けた。
「(雑誌名)ありませんか?」
するとバイトさんは、こっちを向いて聞いてきた。
「(雑誌名)って雑誌、ありましたっけ?」
俺は直接客に向かって言った。
「うちは(雑誌名)は取ってないんです。申し訳ありません」
お客さんが帰った後の会話。
俺「ああ言う時はね、『雑誌の(雑誌名)って、うちにはありましたっけ?』って確認するといいよ」
バイトさん、決して馬鹿ではない。少し考えた末に、「わかりました。確かにその方がいいですね」と頷いてくれた。

  1. 「(雑誌名)って雑誌、ありましたっけ?」
  2. 「雑誌の(雑誌名)って、うちにはありましたっけ?」

さて、(雑誌名)が好きなお客さんの気持ちになって、どっちが印象がいい質問のしかたか考えてみよう。

パンドラ

Subject: パンドラの招待状が届いています

……パンドラ? パンドラ! パンドラボックスか! あけちゃいけない添付ファイルがついてるのか! 見せろ! どんなだ!
ただの出会い系紹介メールでした。orz

ISBNモロモロ

サンプルコード

my $isbn9 = '457606017';
print "$isbn9\n";
my $digit = calc_check_digit($isbn9);
my $isbn = $isbn9.$digit;
print "$isbn9\-$digit\n";
print isbn2hyphen($isbn);

実行結果

457606017
457606017-1
4-576-06017-1

ちなみにこのISBNコードは、ファントム

9桁のISBNから、チェックデジットを計算する

sub calc_check_digit {
	my $isbn = shift; # 引数には、9桁の数値を期待している。
	$isbn =~ s/\D//g; # ハイフンだとかチェックデジットのXとかは削除するよ。。
	chop $isbn while ( 9 < length $isbn ); # チェックデジットは削除するよ。
	# さて、これで正確に9桁の数値になった。
	my $product = 0; # 合計を計算しよう。
	my @digit = split //, $isbn; # ISBNを各桁に分解してコピー。
	foreach my $weight ( 2..10 ) {
		# 各桁に分解して重み付けをかけて合計するよ。
		$product += $weight * pop @digit;
	}
	# この合計を11で割った余りを、さらに11から引いた値。それがチェックデジットだ。
	# もし10だったらそれはXね。
	my $check_digit = (qw(X 9 8 7 6 5 4 3 2 1 0))[($product % 11)-1];
	return $check_digit;
}

10桁のハイフンなしISBNにハイフンを復元する。

sub isbn2hyphen {
	my $isbn = shift ; # 引数には、10桁の数値を期待している。
	my $code = substr $isbn, 1, 2; # 出版社コードの頭二つを取得する。
	my $digit = 2; # 出版社コードの桁数を設定
	if ( $code < 20 ) {
		# 何もしない。
	} elsif ( $code < 70 ) {
		$digit = 3; # 出版社コードの桁数は3
	} elsif ( $code < 85 ) {
		$digit = 4; # 出版社コードの桁数は4
	} elsif ( $code < 90 ) {
		$digit = 5; # 出版社コードの桁数は5
	} elsif ( $code < 95 ) {
		$digit = 6; # 出版社コードの桁数は6
	} else {
		$digit = 7; # 出版社コードの桁数は7
	}
	# ハイフンを入れたISBNコードを作ります。
	my @isbn = split //, $isbn;
	my $result = shift @isbn; # 国コード
	$result .= '-'; # ハイフンを追加
	map { $result .= shift @isbn } ( 1..$digit ); # 規定の桁を追加。
	$result .= '-'; # ハイフンを追加
	map { $result .= shift @isbn } ( 1..(8-$digit) ); # 規定の桁を追加。
	$result .= '-'; # ハイフンを追加
	$result .= shift @isbn; # チェックデジットを追加
	return $result;
}

日本語のニュアンス

カウンターにいた時。
バイトさんにお客さんが話し掛けた。
「(雑誌名)ありませんか?」
するとバイトさんは、こっちを向いて聞いてきた。
「(雑誌名)って雑誌、ありましたっけ?」
俺は直接客に向かって言った。
「うちは(雑誌名)は取ってないんです。申し訳ありません」
お客さんが帰った後の会話。
俺「ああ言う時はね、『雑誌の(雑誌名)って、うちにはありましたっけ?』って確認するといいよ」
バイトさん、決して馬鹿ではない。少し考えた末に、「わかりました。確かにその方がいいですね」と頷いてくれた。

  1. 「(雑誌名)って雑誌、ありましたっけ?」
  2. 「雑誌の(雑誌名)って、うちにはありましたっけ?」

さて、(雑誌名)が好きなお客さんの気持ちになって、どっちが印象がいい質問のしかたか考えてみよう。

パンドラ

Subject: パンドラの招待状が届いています

……パンドラ? パンドラ! パンドラボックスか! あけちゃいけない添付ファイルがついてるのか! 見せろ! どんなだ!
ただの出会い系紹介メールでした。orz

ISBNモロモロ

サンプルコード

my $isbn9 = '457606017';
print "$isbn9\n";
my $digit = calc_check_digit($isbn9);
my $isbn = $isbn9.$digit;
print "$isbn9\-$digit\n";
print isbn2hyphen($isbn);

実行結果

457606017
457606017-1
4-576-06017-1

ちなみにこのISBNコードは、ファントム

9桁のISBNから、チェックデジットを計算する

sub calc_check_digit {
	my $isbn = shift; # 引数には、9桁の数値を期待している。
	$isbn =~ s/\D//g; # ハイフンだとかチェックデジットのXとかは削除するよ。。
	chop $isbn while ( 9 < length $isbn ); # チェックデジットは削除するよ。
	# さて、これで正確に9桁の数値になった。
	my $product = 0; # 合計を計算しよう。
	my @digit = split //, $isbn; # ISBNを各桁に分解してコピー。
	foreach my $weight ( 2..10 ) {
		# 各桁に分解して重み付けをかけて合計するよ。
		$product += $weight * pop @digit;
	}
	# この合計を11で割った余りを、さらに11から引いた値。それがチェックデジットだ。
	# もし10だったらそれはXね。
	my $check_digit = (qw(X 9 8 7 6 5 4 3 2 1 0))[($product % 11)-1];
	return $check_digit;
}

10桁のハイフンなしISBNにハイフンを復元する。

sub isbn2hyphen {
	my $isbn = shift ; # 引数には、10桁の数値を期待している。
	my $code = substr $isbn, 1, 2; # 出版社コードの頭二つを取得する。
	my $digit = 2; # 出版社コードの桁数を設定
	if ( $code < 20 ) {
		# 何もしない。
	} elsif ( $code < 70 ) {
		$digit = 3; # 出版社コードの桁数は3
	} elsif ( $code < 85 ) {
		$digit = 4; # 出版社コードの桁数は4
	} elsif ( $code < 90 ) {
		$digit = 5; # 出版社コードの桁数は5
	} elsif ( $code < 95 ) {
		$digit = 6; # 出版社コードの桁数は6
	} else {
		$digit = 7; # 出版社コードの桁数は7
	}
	# ハイフンを入れたISBNコードを作ります。
	my @isbn = split //, $isbn;
	my $result = shift @isbn; # 国コード
	$result .= '-'; # ハイフンを追加
	map { $result .= shift @isbn } ( 1..$digit ); # 規定の桁を追加。
	$result .= '-'; # ハイフンを追加
	map { $result .= shift @isbn } ( 1..(8-$digit) ); # 規定の桁を追加。
	$result .= '-'; # ハイフンを追加
	$result .= shift @isbn; # チェックデジットを追加
	return $result;
}

日本語のニュアンス

カウンターにいた時。
バイトさんにお客さんが話し掛けた。
「(雑誌名)ありませんか?」
するとバイトさんは、こっちを向いて聞いてきた。
「(雑誌名)って雑誌、ありましたっけ?」
俺は直接客に向かって言った。
「うちは(雑誌名)は取ってないんです。申し訳ありません」
お客さんが帰った後の会話。
俺「ああ言う時はね、『雑誌の(雑誌名)って、うちにはありましたっけ?』って確認するといいよ」
バイトさん、決して馬鹿ではない。少し考えた末に、「わかりました。確かにその方がいいですね」と頷いてくれた。

  1. 「(雑誌名)って雑誌、ありましたっけ?」
  2. 「雑誌の(雑誌名)って、うちにはありましたっけ?」

さて、(雑誌名)が好きなお客さんの気持ちになって、どっちが印象がいい質問のしかたか考えてみよう。

パンドラ

Subject: パンドラの招待状が届いています

……パンドラ? パンドラ! パンドラボックスか! あけちゃいけない添付ファイルがついてるのか! 見せろ! どんなだ!
ただの出会い系紹介メールでした。orz