こないだやったLuhnアルゴリズムでのチェックをHaskellでもやってみた。
module Main (main) where
import Data.Char
numbers = [
"5555555555554444",
"5105105105105100",
"4111111111111111",
"4012888888881881",
"3530111333300000",
"3566002020360505",
"30569309025904",
"38520000023237",
"378282246310005",
"371449635398431",
"378734493671000",
"6011111111111117",
"6011000990139424"
]
checkNumber num = sum' mod
10 == 0
where
sum' = sum $ zipWith add' (cycle [1,2]) (reverse num)
add' x y = let z = x * digitToInt y
in
if z > 9 then z - 9 else z
main = mapM_ (print . checkNumber) numbers
実行結果:
^o^ > runhaskell checkCardNumber.hs True True True True True True True True True True True True True