Skip to content

Instantly share code, notes, and snippets.

@kencoba
Created May 9, 2011 05:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kencoba/962101 to your computer and use it in GitHub Desktop.
Save kencoba/962101 to your computer and use it in GitHub Desktop.
Check credit card number.
(defn- charlist-to-digits [lst]
(map #(Integer/parseInt %)
(map #(str (first %))
(partition 1 2 lst))))
(defn- odd-digits [card-num]
(charlist-to-digits (reverse card-num)))
(defn- even-digits [card-num]
(charlist-to-digits (rest (reverse card-num))))
(defn- sum-of-odd-digits [card-num]
(reduce + (odd-digits card-num)))
(defn- list-of-even-digits [card-num]
(map #(let [v (* % 2)] (if (>= v 10) (- v 9) v))
(even-digits card-num)))
(defn credit-check
"if card-num is a valid number, return true. otherwise false."
[card-num]
(let [check-sum (mod (reduce + (cons (sum-of-odd-digits card-num) (list-of-even-digits card-num))) 10)]
(= check-sum 0)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment