LoginSignup
16
16

More than 5 years have passed since last update.

Ruby でクレジットカード番号をチェックをする

Last updated at Posted at 2015-02-11

決済を扱うシステムで、クレジットカードを扱うことがあるけど、カードの有効性チェックは
どの会社も、数円/1件とかで処理料がかかってしまう。

なので、ユーザーが入力したクレジットカード番号を、そのまま連携先の決済会社に
オーソリ ( 有効性チェック ) を流してしまうと、デタラメな (あるいは入力ミスした)番号分、
余計に処理料がかかるので、カード番号のチェックを入れたかったので、チェックした。

これで不正な番号は防げる!
ただし、有効期限切れとか、カードが停止してるとかは決済会社にオーソリ投げないとわからないので、
あくまでも、変なカード番号分の処理料を減らすためだけ。

クレジットカード番号は、Luhnアルゴリズムというチェックサム方式を利用しているので、
そのロジックを ruby でちぇっくするだけ。

これを使って無駄なお金を使わないようにしよう!

サンプルソース

  def valid_credit_card_number?(card_number)
    return false if card_number.blank?
    even = false
    sum = card_number.reverse.split(//).inject(0) do |s, d|
      d = d.to_i
      if even
        d = d * 2
        s -= 9 if d > 9
      end
      even = !even
      s + d
    end
    sum % 10 == 0
  end

ちなみに、@jnchito さんから教えていただきましたが、
自前でやらなくても、Gem があるみたいです。

かなりのスグレモノで、上記のクレジットカード番号のチェックだけでなく、カード番号からカード会社まで判別してくれます。
しかも CLI までついちゃってます。
DBにカード番号を登録するときに、一緒にカード会社も入れてたら後から使えるかも。
※ ただし、カードの仕向け先 ( 実際に決済処理を行う会社 ) は別なので注意

@jnchito さん、ありがとうございます。

参考URL

http://blog.panicblanket.com/archives/821
http://ja.wikipedia.org/wiki/Luhn%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
http://www.gizmodo.jp/2011/01/post_8367.html
テスト用のカード番号は下記で
http://www.webcreatorbox.com/tech/creditcard-test-numbers/

16
16
6

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
16
16