ユーザ用ツール

サイト用ツール


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