ニュースなどで,マイナンバーの例として 123456789012 なんてのが示されるが,そんなマイナンバーはない。
> func(123456789012)
[1] "NG"
> func(12345678901)
[1] 8
> func(123456789018)
[1] "OK"
先頭 11 桁が 12345678901 ならば,最終桁は 8 でなければならない www
ニュースなどで,マイナンバーの例として 123456789012 なんてのが示されるが,そんなマイナンバーはない。
> func(123456789012)
[1] "NG"
> func(12345678901)
[1] 8
> func(123456789018)
[1] "OK"
先頭 11 桁が 12345678901 ならば,最終桁は 8 でなければならない www
以下の関数は,12 桁のマイナンバーを与えると誤入力の有無を通知する。11桁を入力するとチェックディジットを返す。
func = function(n) {
s = as.character(n)
n = nchar(s)
if (n < 11 || n > 12) return("Error")
s = as.numeric(unlist(strsplit(s, "")))
d = sum(s[1:11] * c(6:2, 7:2)) %% 11
d = ifelse(d < 2, 0, 11 - d)
ifelse(n == 11, d, ifelse(s[12] == d, "OK", "NG"))
}
> func(32111343233)
[1] 1
> func(321113432331)
[1] "OK"
> func(421113332331)
[1] "OK"
最後の 2 つの例を見れば明らかだが,「意図的に」本人のものではないマイナンバーが詐称されると,チェックディジットではチェックできない。