中国インターネット事情

ITを中心に中国の事 もろもろ

マイナンバーのチェックデジット計算プログラム

日本のマイナンバーは、中国の公民番号と違って、出生地や誕生日、性別などに全く紐づいていないようだ。番号からは何もわからないが、人のチェックがやりにくいので運用上の間違えも多そう。 ただし、チェックデジット(下一桁の部分)はある。 たとえば、11111111111なら最後が8になり、111111111118がマイナンバー。

チェックデジットについて総務省が決めた定義 11-([latex]\sum{n=1}^{11}Pn\times Qn[/latex]を11で除した余り)。 ただし[latex]\sum{n=1}^{11}Pn\times Qn[/latex]を11で除した余り≦1の場合は0とする。

PnとQnについて Pn:個人番号を構成する検査用数字以外の十一桁の番号の最下位の桁を1桁目としたときのn桁目の数字。 Qn:1≦n≦6のときn+1  7≦n≦11のときn-5。

となっているので、Delphiで適当に書いてみるとこんな感じか。エラー処理とかしてない。 [delphi] function MyNumberCheck(MyNumber: string): boolean; var S, S2: string; T, N, I: integer;

begin Result := false;

S := ReverseString(MyNumber); if Length(S) <> 12 then Exit; S2 := Copy(S, 1, 1); S := Copy(S, 2, 11); T := 0; for I := 1 to 11 do begin N := Strtoint(S[i]); if I < 7 then T := T + N * (I + 1) else T := T + N * (I - 5); end;

T := T mod 11; case T of 0 .. 1: T := 0; else T := 11 - T; end;

if Inttostr(T) = s2 then Result := true else Result := false; end; [/delphi]