ISBN/ASINについて - Amazon.co.jp
「ASIN」は、「Amazon Standard Identification Number」の略で、Amazonグループが取り扱う、書籍以外の商品を識別する10桁の番号です。
CD、DVD、ビデオ、ソフトウェア、ゲームなど、書籍以外の商品の詳細ページに記載されています。
・ASINは、数字とアルファベットの文字列で、10個の文字からなる。
・これは、0~9、A~Zの36個の文字で表現される36進数として扱える。
AmazonのASINを10進数の整数に変換して扱いたい。
●PHPで36進数と10進数の変換
PHPには、基数を変換する関数が用意されていた。
36進数 - Neo Inspiration
PHPでねえのとおもったらあった・・・
$encoded = base_convert($number,10,36); //10進数の$numberを36進数に変換
PHP: base_convert
base_convert ― 数値の基数を任意に変換する
説明
string base_convert ( string $number , int $frombase , int $tobase )
number を基数 tobase で表した文字列を返します。
number の基数は、 frombase で指定します。
frombase および tobase は、ともに 2 から 36 までである必要があります。
10 より大きな基数を有する数の各桁は、文字 a-z で表されます。
この場合、a は 10、b は 11、z は 35 を意味します。
警告
大きな数値で base_convert() を使用すると、 精度が失われてしまうことがあります。
これは、内部で使用している "double" や "float" の性質によるものです。
●ASINを変換
例として、マイケル・ジャクソンの「スリラー」のASINは、「B0000025RI」になっている。
![]() | Thriller (1990/10/25) Michael Jackson 商品詳細を見る |
「B0000025RI」を36進数の数字と見なして、これを10進数に変換するPHPのコードは、以下のようなコードでOK。
<?php
$asin = 'B0000025RI';
echo $asin;
echo "<br>";
$conv10 = base_convert($asin, 36, 10); // 36進数→10進数
echo $conv10;
echo "<br>";
$conv36 = base_convert($conv10, 10, 36); // 10進数→36進数
echo strtoupper($conv36);
?>
上記のコードを実行すると、以下のような結果になる。
基数変換は、可逆的な変換だから、10進数から元のASIN(36進数)を知ることが可能だ。
B0000025RI
1117159523453358
B0000025RI
●MySQLは、BIGINT型で保存
10桁の36進数は、16桁の10進数で表現できるので、MySQLに保存するときは、BIGINT型のカラムを用意すればOKだ。
MySQL 4.1 リファレンスマニュアル :: 6 MySQL SQL言語リファレンス :: 6.2 カラム型
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
大きい整数。
符号付きの範囲は -9223372036854775808 ~ 9223372036854775807。
符号なしの範囲は 0 ~ 18446744073709551615。
- 関連記事
-
- PHPで文字コードをSJISからUTF8に変換する方法
- PHPで配列の重複を削除する方法
- Fatal error: Allowed memory size of 16777216 bytes exhausted
- PHPのstrlen関数で全角文字が3バイトになる件
- PHPでファイル一括削除
- PHPで日時の大小比較
- CodeIgniter 1.7.1 日本語化パック
- AmazonのASINで、36進数を10進数へ変換
- PHPの正規表現
- MatchBox for CodeIgniter 使い方
- PHPでディレクトリの容量を計算する方法
- CodeIgniterで作られたwiki
- MatchBox for CodeIgniter 和訳
- CodeIgniterでSSLを使う方法
- PHPでできる簡単サーバ監視