以下の関数は,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 つの例を見れば明らかだが,「意図的に」本人のものではないマイナンバーが詐称されると,チェックディジットではチェックできない。
※コメント投稿者のブログIDはブログ作成者のみに通知されます