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)
コメントを投稿