Skip to content

Instantly share code, notes, and snippets.

@mcrisc
Created January 29, 2010 19:01
Show Gist options
  • Save mcrisc/289989 to your computer and use it in GitHub Desktop.
Save mcrisc/289989 to your computer and use it in GitHub Desktop.
def mod10(sequence):
factor = 1
intermediate = ""
for i in range(len(sequence) - 1, -1, -1):
factor = 2 if factor == 1 else 1
intermediate += str(int(sequence[i]) * factor)
remainder = sum([int(d) for d in intermediate]) % 10
return 0 if remainder == 0 else 10 - remainder
assert mod10("8220000215048200974123220154098290108605940") == 1
assert mod10("261533") == 4
assert mod10("2615332") == 0
def mod10(sequence)
factor = 1
intermediate = ""
sequence.reverse.split("").each do |d|
factor = factor == 1 ? 2 : 1
intermediate << (d.to_i * factor).to_s
end
remainder = intermediate.split("").collect{|d| d.to_i}.inject{|sum, i| sum + i} % 10
remainder == 0 ? 0 : 10 - remainder
end
mod10("8220000215048200974123220154098290108605940") == 1 or raise "Failed!"
mod10("261533") == 4 or raise "Failed!"
mod10("2615332") == 0 or raise "Failed!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment