Ruby - マイナンバーのチェックデジットを計算する - Qiita
何となく気になって、チェックディジット(デジット、サム)(※1)の計算方法を調べてみたんだけど、要するにこれを使えば「無意味な11桁の数字」からマイナンバールールに適合するのが作れるということになる。
ということで、上記記事にあったコードを弄ってみた。
def create_my_number(dmynum)
digits = ("%11d" % dmynum.to_i).chars.map(&:to_i)
raise "#{dmynum}" unless digits.length == 11
digits.reverse!
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
%Q!#{"%011d" % dmynum.to_i}#{check_digit}!
end
rng = Random.new()
1000.times do
puts create_my_number(rng.rand(10**11))
end
コメント