読者です 読者をやめる 読者になる 読者になる

ネットの海の片隅で

技術ネタの放流、あるいは不法投棄。

JANコード用のgem「jan」

作ったもの

JANコードを便利に扱うためのgemを作りました。

JANコードっていうのはバーコードに使われているこんなやつです。

f:id:s_osa:20140712224142p:plain

国際的にはEANコードと呼ばれていたりします。

JANコードとは│JANコード登録│ 一般財団法人流通システム開発センター

ean | RubyGems.org | your community gem host は既に存在しているんですが、イマイチな感じだったので自分で作りました。

インストール

s-osa/jan · GitHub に置いてあります。

いつも通り、

gem 'jan'
$ bundle

$ gem install jan

してください。

使い方

基本

JANコードが正しいかチェックします。*1

jan = Jan.new("4901277241126")
jan.valid? # => true

Jan::Validator.validate("4901277241126") # => true

チェックディジットを計算

チェックディジットなしのコードからチェックディジットを計算します。

# Correct code: "4901277241126"

Jan::CheckDigitCalculator.calculate("490127724112") # => 6

要素を取得

JANコードの要素(コード本体・チェックディジット)を取得します。

jan = Jan.new("4901277241126")
jan.check_digit # => 6
jan.body # => "490127724112"

Jan::Parser.check_digit("4901277241126") # => 6
Jan::Parser.body("4901277241126") # => "490127724112"

インストアコードを判別

インストアコード*2かどうかを判別します。

jan = Jan.new("4901277241126")
jan.instore_code? # => false

Jan::Paser.instore_code?("2163179230340") # => true

乱数生成

ランダムなチェックディジット付きJANコードを生成します。インストアコードの範囲内での生成も可能です。

Jan::Random.code # => "5689450935688"
Jan::Random.code(8) # => "11774853"

Jan::Random.instore_code # => "2799375754394"
Jan::Random.instore_code(8) # => "27393086"

janというgem

「jan」という名前のgemを作るに当たり、この名前を取ってしまって良いのかどうか実は結構悩みました。

とはいえ、取ってしまったものはもう仕方がないので、機能に不満がある方はIssueやPRをください。お願いしますm( )m

s-osa/jan · GitHub

バーコード利用の手引き GS1事業者コード(JAN企業コード)登録申請書付 パーフェクトRuby (PERFECT SERIES 6)

*1:モジュール関数のほうがbooleanを返すのに「?」なしになっているのが気持ち悪いのですが、無理やり「形容詞?」型の命名をするのもイマイチな気がしたので「?」なしのメソッド名になっています。

*2:各小売店で自由に使用できるコード