ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    最新の広告

    VPSでWebサイトを作る


    ドメイン名を取得する


    プログラミングの質問サービス


    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    FC2ブログ 管理画面


    with Ajax Amazon

    AmazonのASINで、36進数を10進数へ変換

    このエントリーをはてなブックマークに追加
    通販サイトAmazonの商品には、ASINという商品番号が割り当てられている。

    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」になっている。

    ThrillerThriller
    (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。


    関連記事
    このエントリーをはてなブックマークに追加

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    https://hamamuratakuo.blog.fc2.com/tb.php/391-5299f667