DEV Community

Discussion on: Custom Card Number Verification System Challenge

 
kevinmungai profile image
Kevin Mungai • Edited

Thank you for clarifying. I have now understood.

It is actually a really neat solution it basically reduces the code to just two functions.

(defn is-valid-modified?
  [number]
  (let [first-four (quot number 10)
        check-sum (rem number 10)]
    (-> first-four
        (mod 7)
        (- check-sum)
        (mod 7)
        (= 0))))

user> (is-valid-modified? 10006)
true
user> (is-valid-modified? 99993)
true
user> (is-valid-modified? 99998)
false
user> (is-valid-modified? 12342)
true
user> (is-valid-modified? 11697)
true
(defn validate-scratch-card [card-number]
  (let [f (comp is-valid-modified? #(Integer/parseInt %))]
    (->> (string/split card-number #"(-|\s)")
         (map f)
         (every? true?))))


user> (validate-scratch-card "10006 12342 00081 99998")
false
user> (validate-scratch-card "10006 12342 00081 99993")
true

I have learnt something, thank you.