check_digit
check digit
Luhnアルゴリズム
チェック処理
input = ARGV[0] # Luhn formula check digit s = input.split("").reverse.map(&:to_i).map.with_index do |n, i| # 偶数桁の場合は2倍する(iは0から始まるのでevenではなく、oddで偶数桁を判定) if i.odd? n *= 2 n > 9 ? n - 9 : n # 10以上の場合は1の位と10の位の数字を足す、を最適化 else n end end.sum % 10 if s == 0 puts "OK" exit 0 else puts "NG" exit 1 end
チェックディジットを求める
code = ARGV[0] # Luhn formula check digit d = code.split("").reverse.map(&:to_i).map.with_index do |n, i| if i.even? n *= 2 n > 9 ? n - 9 : n else n end end.sum % 10 # 10 - d が 0 の場合は 0 を出力、それ以外は 10 - d を出力 puts d == 0 ? 0 : 10 - d
check_digit.txt · 最終更新: 2024/02/25 13:39 by nullpon