裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

マイナンバーのチェックディジット(その2)

2015年10月13日 | ブログラミング

ニュースなどで,マイナンバーの例として 123456789012 なんてのが示されるが,そんなマイナンバーはない。

> func(123456789012)
[1] "NG"

> func(12345678901)
[1] 8
> func(123456789018)
[1] "OK"

先頭 11 桁が 12345678901 ならば,最終桁は 8 でなければならない www

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

マイナンバーのチェックディジット

2015年10月13日 | ブログラミング

以下の関数は,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 つの例を見れば明らかだが,「意図的に」本人のものではないマイナンバーが詐称されると,チェックディジットではチェックできない。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村