LoginSignup
30
30

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-26

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

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

なんだか計算が難しそう

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

詳しい解説は他の方がされていますが…
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
30
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
30