1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

オークファンAdvent Calendar 2018

Day 9

JANコードっぽい情報なのにJANコードで探しても見つからない商品がある

Last updated at Posted at 2018-12-08

物流情報を扱ってる弊社ですが、JANコードを扱うことが非常に多いです

しかし、JANコードっぽい情報なのにJANコードで探しても見つからない商品があります

これはなぜ・・・

原因

JANコードっぽいものはITF物流商品情報でした
参考:集合包装用商品コードとITFシンボル

ITFってなんぞ?

JANコードが商品単品での商品識別コードで、
ITFコードは物流商品識別コードです

つまり、
低糖質カルボナーラ CarbOFF(はごろもフーズ)
にかかれているのがJANコードで、
低糖質カルボナーラ CarbOFF(はごろもフーズ)×5個
にかかれているのがITFコードです

商品は単品で流通するものと、ある程度セットになって流通するものがあります
ITFコードは一つのJANコードに対して複数紐づくことになりますね

問題

さて、ここはQiitaなので、エンジニアっぽい事をこれから書きます
ユーザーが入力するのがJANコードなのかITFコードなのか正直分かりません
今までは、JANコードのチェックデジットだけみて、JANコードの妥当性を見てましたが、
顧客は本当はITFコードを入力していたかもしれない

つまり、JANコードが駄目だったらITFコードのチェックデジットもチェックすればいいんじゃないか

そんな事を考えました

成果物

入力した値がJANコードもしくはITFコードであったらtrueを返します

class AucfanJancode:
    total_even = 0
    total_odd = 0

    def setEvenOdd(self, jancode):
        self.total_even = self.total_odd = 0
        for index, item in enumerate(list(jancode)):
            if (index % 2) == 0:
                self.total_even += int(item)
            else:
                self.total_odd += int(item)

    def isJancode(self, jancode):
        self.setEvenOdd(jancode[:12])
        return int(jancode[12:]) == (10 - (self.total_even + (self.total_odd * 3)) % 10)

    def isItfcode(self, jancode):
        if len(jancode) <= 13:
            jancode = '1' + jancode

        self.setEvenOdd(jancode[:13])
        return int(jancode[13:]) == (10 - (self.total_odd + (self.total_even  * 3)) % 10)
        return 10 - (self.total_odd + (self.total_even * 3)) % 10

    def isCode(self, jancode):
        return self.isJancode(jancode)  or self.isItfcode(jancode)

8桁のものもあるぞー!
とか、
UPC対応は?
みたいな話もあるので、もうちょい桁数チェックとか厳密にやっても良かったかもしれませんが、今回はこれで勘弁してください

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?