EAN/JAN→ASIN

最近, コードを書いてない。だから, というわけではないが,
ちょっとわけがあってEAN/JANで検索するプログラムを書きたくなったので
今日はAmazon Web Service(以下, AWS)で少しだけ遊んでいた。

AWSでは書籍はEAN/JAN(ISBN13)*1で検索できないので,
ASIN(ISBN10)に変換する必要がある。2007年以降に出版される書籍はISBN13に移行するので
そのままEAN/JANを使えばいいらしいけど。

function ean_to_asin($strEAN){
	
    if(!is_string($strEAN) || ($len = strlen($strEAN)) != 13){
        die "番号が正しくない";
    }

    $str = substr($strEAN, 3, 9);
    $sum = 0;	

    for($i=0;$i<$len;$i++){
        $sum += intval($str[$i]) * (10 - $i);
    }
    
    $num = 11 - ($sum % 11);

    if($num == 10){
        $strChecked = "X";
    }
    elseif($num == 11){
        $strChecked = "0";
    }
    else{
        $strChecked = strval($num);
    }

    return $str.$strChecked;
}

計算方法は, ここを参考にしました。

*1:バーコードのこと