nhs-number-check.ss
#lang scheme
; nhs number validator
;; 10 digits
;; last is check digit
(provide 
 calculate-nhs-number-check-digit
 valid-nhs-number?
 )

(define (calculate-nhs-number-check-digit list-of-digits)
  (let ((c (- 11 (modulo (apply + (map * list-of-digits '(10 9 8 7 6 5 4 3 2))) 11))))
    (cond
      [(eq? c 11) 0]
      [(eq? c 10) #f] ;invalid
      [else c]
      )))

(define (valid-nhs-number? list-of-digits)
  (and (last list-of-digits)
  (equal? 
   (calculate-nhs-number-check-digit (take list-of-digits 9))
   (last list-of-digits)
   )))