マイナンバーのチェックデジットの計算をわかりやすく解説
この記事では、マイナンバーのチェックデジットの計算に挫折した人のために解説をします。
なんだか計算が難しそう
「マイナンバーのチェックデジットを計算してみたい!自分の周りで流行ってるし!」
「よし計算方法を調べてみよう!」
詳しい解説は他の方がされていますが…
http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64
なんだかシグマとかPとかQとか…ちょっとメンドクサソウです。
「あ、なんだか計算難しそう」と実際に計算をするのを諦めた人も多いのではないでしょうか。
中学校の知識で解けるけど…少しは頭を回転させる必要があるので面倒くさい!
そこで、ピーとかキューとか記号を見ると頭が痛くなる人のためにチェックデジットの計算方法を少しだけわかりやすく解説します。
計算方法
マイナンバー(個人番号)は12桁ですが、12桁目は1~11桁目を用いて算出されたチェックデジットになります。
詳しい計算式は他の方の記事なり総務省のドキュメントを参照して欲しいのですが…
チェックデジットの計算方法を簡単に説明すると、こんな感じです。
- マイナンバーのそれぞれの桁に対し、上位から
6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
を掛ける。 - 1の計算結果の和を11で割った余りを求める。これが
0~1
のとき、チェックデジットは0
です。
余りが0~1
以外の場合は、11から剰余を引いた結果がチェックデジットになります。
例:マイナンバーがの上11桁が99999999999の場合
図解すると少しだけ簡単に見えますよね?
ハイ、この場合はチェックデジット(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