Skip to content

Instantly share code, notes, and snippets.

@AllPurposeName
Created December 17, 2014 15:17
Show Gist options
  • Save AllPurposeName/e4a84cd4c40d21d7e480 to your computer and use it in GitHub Desktop.
Save AllPurposeName/e4a84cd4c40d21d7e480 to your computer and use it in GitHub Desktop.
card_number = "4929735477250543"
total_number = 0
valid = false
# 4929735477250543
# other numbers when checked are either:
#
# valid1 = "5541808923795240"
# valid2 = "4024007136512380"
# valid3 = "6011797668867828"
# or
# invalid1 = "5541801923795240"
# invalid2 = "4024007106512380",
# invalid3 = "6011797668868728"
digit1 = card_number[0].to_i * 2
if digit1 > 9
digit1 = digit1.to_s
digit1 = digit1[0].to_i + digit1[1].to_i
end
digit2 = card_number[2].to_i * 2
if digit2 > 9
digit2 = digit2.to_s
digit2 = digit2[0].to_i + digit2[1].to_i
end
digit3 = card_number[4].to_i * 2
if digit3 > 9
digit3 = digit3.to_s
digit3 = digit3[0].to_i + digit3[1].to_i
end
digit4 = card_number[6].to_i * 2
if digit4 > 9
digit4 = digit4.to_s
digit4 = digit4[0].to_i + digit4[1].to_i
end
digit5 = card_number[8].to_i * 2
if digit5 > 9
digit5 = digit5.to_s
digit5 = digit5[0].to_i + digit5[1].to_i
end
digit6 = card_number[10].to_i * 2
if digit6 > 9
digit6 = digit6.to_s
digit6 = digit6[0].to_i + digit6[1].to_i
end
digit7 = card_number[12].to_i * 2
if digit7 > 9
digit7 = digit7.to_s
digit7 = digit7[0].to_i + digit7[1].to_i
end
if digit8 = card_number[14].to_i * 2
digit8 > 9
digit8 = digit8.to_s
digit8 = digit8[0].to_i + digit8[1].to_i
end
# puts digit1..digit8
# sanity check
total_number = card_number[1].to_i + total_number
total_number = card_number[3].to_i + total_number
total_number = card_number[5].to_i + total_number
total_number = card_number[7].to_i + total_number
total_number = card_number[9].to_i + total_number
total_number = card_number[11].to_i + total_number
total_number = card_number[13].to_i + total_number
total_number = card_number[15].to_i + total_number
# puts total_number
# sanity check
total_number = total_number + digit1 + digit2 + digit3 + digit4 + digit5 + digit6 + digit7 + digit8
# puts total_number
# sanity checksum
if total_number % 10 == 0
puts "The number is valid!"
else
puts "The number is invalid, sucka!"
end
# Your Luhn Algorithm Here
# Best refactor idea: learn sort methods and extract all even numbers
# into own string to work on seperately WITH ITERATION. Recombine later.
# American Express solution: define starting point more clearly with
# a reverse method, then work on that, as the even/odds of a reversed
# string will protect the check digit.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment