パスワードを忘れた? アカウント作成
117991 journal

t-nissieの日記: 【電脳】クレジットマスター 4

日記 by t-nissie

カード番号と有効期限だけで買い物ができる通販サイトが
あるらしい。チェックディジットを合わせることなら簡単
だが、有効期限はどうやって推測しているのだろうか。

Perlモジュールは CreditCard.pm(左上のSourceをクリック)。

Rubyは昔、ruby-talkでいかに短く書けるかが競われてい
たような気がする。

Perl版からチェックディジットを計算するところだけをRuby
に書き換えてみた。自分の2つのカードでは確かめたけど…
番号が16桁でないカードなんてホントにあるのかしら。

#!/usr/bin/env ruby
# CreditCard.rb   Credit Card Check Digit Checker by t-nissie
##
while line = ARGF.gets
  number = line.delete(" \t\r\n\f\v")
  sum = 0
  (0..number.length-2).each do |i|
    #p i
    #p number[-(i+2),1].to_i
    weight = number[-(i+2),1].to_i * (2 - i.modulo(2))
    sum += ((weight < 10) ? weight : (weight - 9))
  end
  print number, " ", (10 - sum % 10) % 10, "\n"
end

実行方法:

$ echo '4321 0987 6543 2107' | ./CreditCard.rb
4321098765432107 7

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...