ISBN10/13 相互変換用コード
使う人がいるかわからんが、図書系のWeb APIを使う場合、必須なので誰かいるかもしれん。ということで置いておく。
いまのところ、ASIN(Amazon管理コード)はISBN10と同義なのでISBN13からASINへの変換はこれで足りるけど、一応Amazon側は将来的な仕様変更の可能性も残しているので、変更になったらここにASIN変換用コードをたさんといかんな。
<?php function ISBN_9to10($isbn){ // 総和を求める for ($digit=0, $i=0; $i<9; $i++){ $digit += $isbn{$i} * (10 - $i); } // 11から総和を11で割った余りを引く(10の場合はX, 11の場合は0に) $digit = (11 - ($digit % 11)) % 11; if ($digit == 10){ $digit = "X"; } return $isbn.$digit; } // 9桁ISBNを13桁新ISBNにする function ISBN_9to13($isbn){ $isbn = "978" . $isbn; // 総和を求める for ($digit=0, $i=0; $i<12; $i++){ $digit += $isbn{$i} * ($i % 2 == 0 ? 1 : 3); } // 10から総和を10で割った余りを引く(10の場合は0に) $digit = (10 - ($digit % 10)) % 10; return $isbn.$digit; } // 10桁旧ISBNを13桁新ISBNにする function ISBN_10to13($isbn){ $isbn = substr($isbn, 0, 9); // チェックデジット除去 return ISBN_9to13($isbn); } // 13桁新ISBNを10桁旧ISBNにする function ISBN_13to10($isbn){ $isbn = substr($isbn, 3, 9); // 978+チェックデジット除去 return ISBN_9to10($isbn); } // 12桁新ISBNにチェックデジットを足す function ISBN_12to13($isbn){ $isbn = substr($isbn, 3, 9); // 978接頭辞除去 return ISBN_9to13($isbn); } // 12桁新ISBNを10桁旧ISBNにする function ISBN_12to10($isbn){ $isbn = substr($isbn, 3, 9); // 978接頭辞除去 return ISBN_9to10($isbn); } ?>