個人用マイナンバーのチェックデジットをVBAで算出してみました。
参考までに。。。
' http://law.e-gov.go.jp/announce/H26F11001000085.html ' ' (検査用数字を算出する算式) ' 第五条 令第八条の総務省令で定める算式は、次に掲げる算式とする。 ' 算式 ' 11―(n=1(シグマ)11(Pn×Qn))を11で除した余り) ' ただし、(n=1(シグマ)11(Pn×Qn))を11で除した余り≦1の場合は、0とする。 ' 算式の符号 ' Pn 個人番号を構成する検査用数字以外の十一桁の番号の最下位の桁を1桁目としたときのn桁目の数字 ' Qn 1≦n≦6のとき n+1 7≦n≦11のとき n―5 ' Function CalcCheckDigit(number As String) As Integer Dim digits As String Dim chkDigit As String Dim cd As Integer cd = -1 ' 12桁でなければ無効 If Len(number) <> 12 Then CalcCheckDigit = cd Exit Function End If ' チェックデジット部分を取出し chkDigit = Right(number, 1) ' マイナンバー11桁取出し digits = Left(number, 11) Dim n, pn, qn, m As Long Dim sum As Long res = False sum = 0 For n = 1 To 11 ' n桁目の数字 ' 小さい桁から計算(検査用数字以外の十一桁の番号の最下位の桁を1桁目) pn = CInt(Mid(digits, 11 - n + 1, 1)) ' 1≦n≦6のときn+1 If n <= 6 Then qn = n + 1 ' 7≦n≦11のときn―5 Else qn = n - 5 End If sum = sum + pn * qn Next ' 11 で割った余り m = sum Mod 11 ' (n=1(シグマ)11(Pn×Qn))を11で除した余り≦1の場合は、0とする If m <= 1 Then cd = 0 ' 11―(n=1(シグマ)11(Pn×Qn))を11で除した余り) Else cd = 11 - m End If CalcCheckDigit = cd End Function
ためしに自分のマイナンバーで計算してみると合っていました。^_^;
参考サイト:
http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64