バーコードのチェックサム
目にすることが一番多いであろう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で毎回条件判定とかもあまり・・・