misc.log

日常茶飯事とお仕事と

Mod11チェックディジット

チェックディジットの計算をする必要があるので、出し方を調べて書いてみた。

Dim SummaryValue As Integer = 0
Dim ResultValue As Integer
Dim SourceLength As Integer = Source.Length - 1
Dim ReversedPos As Integer

For i As Integer = 0 To SourceLength
    ReversedPos = SourceLength - i
    SummaryValue += CInt(Source.Substring(i, 1)) * ((ReversedPos Mod 6) + 2)
Next
ResultValue = 11 - (SummaryValue Mod 11)
Return ResultValue

ウェイト2〜7で計算するが、この重みの値を出すのに、反転した文字位置を6で割った余りに2を足している。もしかしたら、別に配列などを用意して素直に掛けた方が高速かもしれないね。ま、いいや。