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

マイナンバーのチェックデジットの計算をわかりやすく解説

More than 3 years have passed since last update.

マイナンバーのチェックデジットの計算をわかりやすく解説

この記事では、マイナンバーのチェックデジットの計算に挫折した人のために解説をします。

なんだか計算が難しそう

「マイナンバーのチェックデジットを計算してみたい!自分の周りで流行ってるし!」
「よし計算方法を調べてみよう!」

詳しい解説は他の方がされていますが…
http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64

なんだかシグマとかPとかQとか…ちょっとメンドクサソウです。
「あ、なんだか計算難しそう」と実際に計算をするのを諦めた人も多いのではないでしょうか。
中学校の知識で解けるけど…少しは頭を回転させる必要があるので面倒くさい!
そこで、ピーとかキューとか記号を見ると頭が痛くなる人のためにチェックデジットの計算方法を少しだけわかりやすく解説します。

計算方法

マイナンバー(個人番号)は12桁ですが、12桁目は1~11桁目を用いて算出されたチェックデジットになります。
詳しい計算式は他の方の記事なり総務省のドキュメントを参照して欲しいのですが…
チェックデジットの計算方法を簡単に説明すると、こんな感じです。

  1. マイナンバーのそれぞれの桁に対し、上位から 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2を掛ける。
  2. 1の計算結果の和を11で割った余りを求める。これが0~1のとき、チェックデジットは0です。 余りが0~1以外の場合は、11から剰余を引いた結果がチェックデジットになります。

例:マイナンバーがの上11桁が99999999999の場合

mynum.png
図解すると少しだけ簡単に見えますよね?
ハイ、この場合はチェックデジット(12桁目)は6になります。

お約束の計算プログラム

ご自由にお持ち帰りください。

JavaScript
function Mynumber(){}

// 計算用数値Qn
Mynumber.q = [6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2];

// 12桁の個人番号が正しいかどうかを確認
Mynumber.isValid = function(duodecupleDigits){
  if(!/^\d{12}$/.test(duodecupleDigits)) return false;
  var checkDigit = this.calcCheckDigit(duodecupleDigits.substring(0, 11));
  return duodecupleDigits[11] == checkDigit;
}

// 個人番号の1~11桁からチェックデジットを求める
Mynumber.calcCheckDigit = function(undecupleDigits){
  if(!/^\d{11}$/.test(undecupleDigits)) return -1;
  // Pn * Qn の合計値
  var sumPnxQn = 0;
  for(var i = 0; i < 11; i++){
    sumPnxQn += undecupleDigits[i] * this.q[i];
  }

  var mods = sumPnxQn % 11;

  // (Pn * Qn) % 11 <= 1 のときチェックデジットは 0 とする
  if(mods <= 1){
    return 0;
  }else{
    return 11 - mods;
  }
}
JS-Console
Mynumber.calcCheckDigit("99999999999")
=> 6

Mynumber.isValid("999999999996")
=> true
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away