バーコードのチェックサム

目にすることが一番多いであろうJANコード
そのチェックサム

流通システム開発センター
http://www.dsri.jp/jan/check_digit.htm
ここの絵が分かりやすい。


Option Explicit

Public Function outCode(ProdCode As String)
  Dim i         As Long
  Dim chkSum    As Long
  Dim tempNum   As Long
  Dim tempStr   As String
  Dim CorpCode  As String: CorpCode = 450123456

  tempStr = CorpCode & ProdCode

' 標準タイプ13桁用
' 短縮コードと集合包装用商品コードは考慮していない
  tempNum = 0
  For i = 2 To 12 Step 2
    tempNum = tempNum + Val(Mid(tempStr, i, 1))
  Next
  chkSum = tempNum * 3
  
  tempNum = 0
  For i = 1 To 11 Step 2
    tempNum = tempNum + Val(Mid(tempStr, i, 1))
  Next
  chkSum = chkSum + tempNum
  
  If Right(Str(chkSum), 1) <> "0" Then
    outCode = tempStr & (10 - Val(Right(Str(chkSum), 1)))
  Else
    outCode = tempStr & "0"
  End If
End Function


反省と今後
・リーダブルコードを読み直して、わかりやすい変数名に変える。
・同じような処理をするforが2つあるのは頭悪く見える。でもif modで毎回条件判定とかもあまり・・・