マイナンバーのチェックディジット計算
from 配列
マイナンバーのチェックディジット計算
マイナンバーは12桁であるが,最後の桁(チェックディジット)は残りの桁から次の計算で求められる:
code:mynumber.c
#include <stdio.h>
int main(void)
{
int x[] = { 1,2,3,4,5,6,7,8,9,0,1 }; /* 11桁 */
int n, s, r;
s = 0;
for (n = 1; n <= 6; n++) {
s += x11-n * (n+1);
}
for (n = 7; n <= 11; n++) {
s += x11-n * (n-5);
}
s %= 11; /* s = s % 11; と同じ。s を11で割った余りを s に代入する */
if (s <= 1) {
r = 0;
} else {
r = 11 - s;
}
printf("%d\n", r);
return 0;
}
最初の int x[] = { 1,2,3,4,5,6,7,8,9,0,1 }; では x という配列を定義している。x[0] に1が,x[1] に2が,・・・x[10] に1が入る。
なお,このアルゴリズムは総務省令第八十五号(PDF)第五条で定められている。
このアルゴリズムをブラウザで試せるようにJavaScriptで実装したページを公開していたところ,個人情報保護委員会からご指導を受けてしまった。