こないだやった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