マイナンバーのチェックデジットをVBAで算出

個人用マイナンバーのチェックデジットを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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください