Slide 51
Slide 51 text
ϚΠφϯόʔ
def valid_digit?(value)
digits = value.to_s.chars.map(&:to_i)
return false if digits.length != 12
check_digit = digits.pop
digits.reverse!
mods = (1..11).sum do |n|
pn = digits[n - 1]
qn = n <= 6 ? n + 1 : n - 5
pn * qn
end % 11
calced_check_digit = mods <= 1 ? 0 : 11 - mods
check_digit == calced_check_digit
end