Last active
September 12, 2015 03:30
-
-
Save ytkhs/beb2998e1b8a2efb25a5 to your computer and use it in GitHub Desktop.
マイナンバーのチェックデジットを計算する ref: http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def validate_my_number(mynumber) | |
# 整数列化 | |
digits = mynumber.to_s.chars.map(&:to_i) | |
# 12桁しか認めない | |
return false unless digits.length == 12 | |
# チェックデジットを分離します | |
check_digit = digits.pop | |
# 残った数字を小さい方から調べます | |
digits.reverse! | |
# 数列の和を11で割った余りを計算します | |
remainder = (1..11).inject(0) {|sum, i| | |
p = digits[i-1] | |
q = (i <= 6) ? i+1 : i-5 | |
sum + p*q | |
} % 11 | |
case remainder | |
when 0,1 | |
check_digit === 0 | |
else | |
check_digit === (11 - remainder) | |
end | |
end | |
p validate_my_number(123456789010) #=> false | |
p validate_my_number(123456789011) #=> false | |
p validate_my_number(123456789012) #=> false | |
p validate_my_number(123456789013) #=> false | |
p validate_my_number(123456789014) #=> false | |
p validate_my_number(123456789015) #=> false | |
p validate_my_number(123456789016) #=> false | |
p validate_my_number(123456789017) #=> false | |
p validate_my_number(123456789018) #=> true | |
p validate_my_number(123456789019) #=> false | |
p validate_my_number("023456789013") #=> true (先頭が0の場合) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment