Skip to content

Instantly share code, notes, and snippets.

@genta
Last active October 8, 2015 07:13
Show Gist options
  • Select an option

  • Save genta/9ad61bd3061a003199d6 to your computer and use it in GitHub Desktop.

Select an option

Save genta/9ad61bd3061a003199d6 to your computer and use it in GitHub Desktop.
与えられたマイナンバーをチェックデジットに基づき検査する
def verify_my_number(my_number)
my_number = my_number.to_i
raise ArgumentError unless (0..999999999999).cover?(my_number)
remain, given_check_digit = my_number.divmod(10)
check_digit = 0
11.times do |i|
remain, p_i = remain.divmod(10)
check_digit += p_i * (i % 6 + 2)
end
return (11 - check_digit % 11) % 10 == given_check_digit
end
__END__
#### Examples
p verify_my_number('123456789010') #=> false
p verify_my_number('123456789011') #=> false
p verify_my_number('123456789012') #=> false
p verify_my_number('123456789013') #=> false
p verify_my_number('123456789014') #=> false
p verify_my_number('123456789015') #=> false
p verify_my_number('123456789016') #=> false
p verify_my_number('123456789017') #=> false
p verify_my_number('123456789018') #=> true
p verify_my_number('123456789019') #=> false
p verify_my_number('023456789013') #=> true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment