luhn_test_of_credit_card_numbers.sf 408 B

1234567891011121314151617
  1. #!/usr/bin/ruby
  2. func luhn (n) {
  3. var chars = n.to_s.reverse.split(1).map{.to_i};
  4. var (i, sum) = (0, 0);
  5. static a = (0..9 -> map {|j| (2*j / 10 -> int) + (2*j % 10 -> int) });
  6. chars.each { |j|
  7. sum += (i++.is_odd ? a[j] : j);
  8. };
  9. return (sum % 10 == 0);
  10. }
  11. # Test and display
  12. [49927398716, 49927398717, 1234567812345678, 1234567812345670].each { |n|
  13. say [n, luhn(n)].dump;
  14. }