東工大学長「私のマイナンバーは素数でした!」
東工大生「ウォオオオ!!!」
東工大学長「しかも素数を順番にかけていった数に1を足した素数である素数階乗素数です!」
エセ東工大生「ウォオオオ!!!!」
真の東工大生(12桁だから200560490131だな……特定してしまった…)
— 湘南ペンギン (@shonanpen) November 17, 2015
~数学科~
教授「みなさん、マイナンバーは知ってますね」
学生「?」
教授「私のナンバーが届きました」
学生「!」
教授「なんと」
学生(素数ッ!?)
教授「完全数でした!」
学生(137438691328だ……)
学生(12桁の完全数は137438691328しかない…… )
— タカエイ (@tm_eagle) November 16, 2015
こう言う誤解もある。
マイナンバー000000000001は誰なんだよ
— 矢野 圭介 (@yanomania) September 8, 2015
でもここに上がっている12桁の数字は、全てマイナンバーとしては不正な番号。なぜならマイナンバーは11桁の番号部分と末尾1桁のチェックデジットで構成されているから、チェックディジットを計算するとあり得ない組み合わせになってしまうのだ。
チェックディジット(check digit、検査数字)とは、符号の入力誤りなどを検出するために、元の符号に付加される数字のこと
Wikipediaより
【経済】1等10億円の「マイナンバーくじ」 有識者会議が検討
https://t.co/lLaNZBz9qo
賞金は1等10億円、2等5億円、3等1億円と超高額配当で、年内にも「年末ドリームマイナンバーくじ」を実施したいという。 pic.twitter.com/23W3HPKS4B
— 虚報タイムス (@kyoho_times) October 26, 2015
これも12個の数字を矢であてて任意に選んでしまうと、最後の数字がチェックディジットとして正しい数字が選ばれることもあれば、選ばれないこともあり得るので当選金が出ない場合がある。
では、マイナンバーのチェックディジットはどのようなロジックで計算されるのだろうか。それは法律で決まり、総務省が次の様な省令を出している。
行政手続における特定の個人を識別するための番号の利用等に関する法律の規定による通知カード及び個人番号カード並びに情報提供ネットワークシステムによる特定個人情報の提供等に関する省令(平成二十六年十一月二十日総務省令第八十五号)
この省令の第5条に計算方法が示されている。
(検査用数字を算出する算式)
第五条 令第八条の総務省令で定める算式は、次に掲げる算式とする。
算式
11―((n=1(シグマ)11(Pn×Qn))を11で除した余り)
ただし、(n=1(シグマ)11(Pn×Qn))を11で除した余り≦1の場合は、0とする。
算式の符号
Pn 個人番号を構成する検査用数字以外の十一桁の番号の最下位の桁を1桁目としたときのn桁目の数字
Qn 1≦n≦6のとき n+1 7≦n≦11のとき n―5
分かりにくいので式で表すと:
- 検査用数字:
但し、
の場合は、0(ゼロ)とする。
- PnとQnの定義
を桁目としたときの n 桁目の数字
Qn:1 ≦ n ≦ 6のとき n+1、7 ≦ n ≦ 11 のとき n-5
これをRubyのスクリプトを(ファイル名:myNumber.rb)作ってみた。恥ずかしながら公開(あ〜汚いコードだ!)
これをRubyのスクリプトを(ファイル名:myNumber.rb)作ってみた。恥ずかしながら公開(あ〜汚いコードだ!)
#! /bin/sh exec ruby -S -x "$0" "$@" #! ruby def imputError STDERR.puts "12桁の数字を入力!" exit 0 end str = ARGV[0] imputError if !(str =~ /[0-9]{12}/) sum=0 for i in 0..10 if i>=0 && i<=5 then j=i+1 else j=i-5 end sum = sum + str[10-i].to_i * (j+1) end if (sum % 11) <= 1 then checkDigit = 0 else checkDigit = 11 - (sum % 11) end if str[11].to_i == checkDigit then print "OK", "\n" else print "NG ", "チェックディジットは", checkDigit, "\n" endコマンドラインから実行すると次の通り。
>$ myNumber.rb 200560490131 >$ NG チェックディジットは4 >$ >$ myNumber.rb 200560490134 >$ OKちなみに政府広報に表示されているサンプルも不正なのだ!
>$ myNumber.rb 123456789012 >$ NG チェックディジットは8
0 件のコメント:
コメントを投稿