ラベル バーコード の投稿を表示しています。 すべての投稿を表示
ラベル バーコード の投稿を表示しています。 すべての投稿を表示

2011-02-21

pythonでISBN、JANコードの有効性をチェックする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ISBNやJANコードの最後の一桁がチェックデジットになっているので、適当に与えられたものでないかどうかをチェックする関数をpythonで作ってみました。

ちなみにJANコードは、8桁13桁が有効として
ISBNは古い体系の10桁のものをチェックしています。
ISBNの新しい体系の13桁のものはJANコードと同じなのでJANコードの関数の方でチェックできます。

まずはJANコードの版はこんな感じです。
def check_jan_code(code):
    if code.isdigit() == False :
        return False
    if len(code) == 8 or len(code) == 13 :
        pass
    else :
        return False
        
    cd = code[-1]
    data = code[0:-1]
    total = 0
    for i in range(0,len(data)):
        if i%2 ==0 :
            total = total + int(data[i])
        else:
            total = total + int(data[i]) * 3
    dig = total % 10
    dig = 10 - dig
    if dig == 10 :
        dig = 0
    if dig == int(cd) :
        return True
    else :
        return False

そしてISBNはこんな感じです。
def check_isbn(code):
    pattern = "^[0-9]{9}[0-9X]{1}$"
    if re.match(pattern,code) :
        pass
    else :
        return False
        
    cd = code[-1]
    data = code[0:-1]
    total = 0
    w = 10
    for i in range(0,len(data)):
        total = total + int(data[i]) * w
        w = w - 1
    dig = total % 11
    dig = 11 - dig
    if dig == 10 :
        dig = "X"
    if str(dig) == cd :
        return True
    else :
        return False

ちなみに、うまい棒チョコレート味のJANコードは49480764です。



※JANコードチェックでCDが0の時の処理が間違っていたので修正しました(2011/9/16)

2009-01-02

JAN/EANバーコードからそれが何かを判別する方法

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
SOBARCOでは、携帯の専用アプリを利用してカメラでJAN/EANバーコードを撮り、それから撮影したものがなんであるかを判別しています。
(別にカメラで撮らなくてもバーコードを入力する場所は実際にあるのですけどね)

判別は基本的に、amazonのWEBサービスを利用して行っています。
本とか限定でバーコードで検索する方法は、比較的簡単にわかったのですが本とかCDとかカテゴリを指定せずにカテゴリ横断でバーコードを利用した検索する方法がなかなか見つからなかったのですが、
http://postcard.blog.ocn.ne.jp/itazura/2006/10/cddvd_c5e4.htmlにやり方が書いてありました。

要約するとItemSearchを使うときにSearchIndexをBlendedにしてKeywordsにバーコードを与えてやれば、カテゴリを問わず検索ができるということです。

これの欠点としては、実際には単に全文検索をやっているような気がするので、別にバーコードでないものも普通に検索できます。
なのでEANでないISBNとか入れても検索はできます。
バーコードのみとかのガードをしたいとなればちゃんと以下を参考にチェックデジットのチェックをした方がよいと思います。
http://www.dsri.jp/jan/check_digit.htm#img_01

amazonさんでも残念ながらすべてバーコードが判別できるわけではありません。
そこでSOBARCOではamazonで検索しても分からなかった場合は、
はてなさんのはてなキーワードにJAN/EAN一覧があるのでそちらを利用しています。
http://d.hatena.ne.jp/ean/4909411030681
のように
http://d.hatena.ne.jp/ean/バーコード
のページを取得して、その内容をパースして調べています。
バーコードが登録されていなければ、レスポンスはリダイレクトされるのでレスポンスコードを判別することで登録されているかどうかはわかります。

これでも検索できないものは当然すごくあります。
普通にコカコーラが判別できなかったのが、ちょっと予想外だったりしました。