ユーザ用ツール

サイト用ツール


check_digit

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

check_digit [2024/02/25 12:14] – 作成 nullponcheck_digit [2024/02/25 13:39] (現在) nullpon
行 3: 行 3:
  
 ## Luhnアルゴリズム ## Luhnアルゴリズム
 +
 +チェック処理
  
 ```ruby ```ruby
行 9: 行 11:
 # Luhn formula check digit # Luhn formula check digit
 s = input.split("").reverse.map(&:to_i).map.with_index do |n, i| s = input.split("").reverse.map(&:to_i).map.with_index do |n, i|
-  # 偶数桁の場合は2倍する(iは0から始まるので数桁の場合はiが奇数+  # 偶数桁の場合は2倍する(iは0から始まるのでevenではなく、oddで偶数桁を判定
   if i.odd?   if i.odd?
     n *= 2     n *= 2
-  end +    n > 9 ? n - 9 : n  # 10以上の場合は1の位と10の位の数字を足す、を適化
- +
-  # 10以上の場合は1の位と10の位を足す(18が大なので10の位は必ず1) +
-  if n < 10 +
-    n+
   else   else
-    n = n % 10 + 1+    n
   end   end
-end.sum+end.sum % 10
  
-if (% 10) == 0 +if s == 0 
-  puts "OK #{s}"+  puts "OK" 
 +  exit 0
 else else
-  puts "NG #{s}"+  puts "NG" 
 +  exit 1
 end end
 ``` ```
  
 +チェックディジットを求める
  
 +```ruby
 +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
 +```
 </markdown> </markdown>
check_digit.1708863278.txt.gz · 最終更新: 2024/02/25 12:14 by nullpon