2016-12-08 10 views
0

私はVBAアクセスでEAN 14 UPCコードを検証しようとしています。私はそれをオンラインで見つけることを試みているが運がない。私はちょうどEAN 8、EAN 13見つかりだから、私は、次のようEAN 13に類似し、それをコーディングしてみました:それは働いていないEAN-14のチェックサム数値の計算方法は?

If Len(Barcode) = 14 Then 
    'do the check digit for EAN 14 for anything 14 long 
    checkDigitSubtotal = (Val(Mid(Barcode, 2, 1))) _ 
          + (Val(Mid(Barcode, 4, 1))) _ 
          + (Val(Mid(Barcode, 6, 1))) _ 
          + (Val(Mid(Barcode, 8, 1))) _ 
          + (Val(Mid(Barcode, 10, 1))) _ 
          + (Val(Mid(Barcode, 12, 1))) 
     checkDigitSubtotal = (3 * checkDigitSubtotal) _ 
          + (Val(Mid(Barcode, 1, 1))) _ 
          + (Val(Mid(Barcode, 3, 1))) _ 
          + (Val(Mid(Barcode, 5, 1))) _ 
          + (Val(Mid(Barcode, 7, 1))) _ 
          + (Val(Mid(Barcode, 9, 1))) _ 
          + (Val(Mid(Barcode, 11, 1))) _ 
          + (Val(Mid(Barcode, 13, 1))) 

    If Right(Str(300 - checkDigitSubtotal), 1) <> Right(Barcode, 1) Then 
     Validate_UPC = "EAN14-BAD" 
     Exit Function 
    End If 
     Validate_UPC = "EAN14-GOOD" 
     Exit Function 
    End If 

。問題私は有効なEANを入力しても、それは私にEAN14-BADを与えます。私は私の検証コードが動作していないと思う。最後の行をEAN13検証コードに追加しました。 + (Val(Mid(Barcode, 13, 1))) 助けてください。

+0

あなたは数字、つまり、3と第二の小計を掛けなければならない代わりに、3で最初の小計を掛けるべきではありません奇数の位置で。 – Codo

+0

@Codo:EAN-14専用ですか?上記のようにコーディングしたとき、EAN-8とEAN-13で動作するからですか? – toofaced

+0

GS1は[チェックデジットを計算する]方法について説明しています(http://www.gs1.org/how-calculate-check-digit-manually)。 1桁目から2桁目の最後の桁まで作業すると、偶数桁または奇数桁に3を掛けているかどうかが変わります。逆方向に作業すると、EANコードの長さによって整合性が取れます。 – Codo

答えて

0

8文字で試しましたか?

If Len(Barcode) = 8 Then 
    'do the check digit for EAN 8 for anything 8 long 
    checkDigitSubtotal = (Val(Mid(Barcode, 2, 1))) _ 
          + (Val(Mid(Barcode, 4, 1))) _ 
          + (Val(Mid(Barcode, 6, 1))) 
     checkDigitSubtotal = (3 * checkDigitSubtotal) _ 
          + (Val(Mid(Barcode, 1, 1))) _ 
          + (Val(Mid(Barcode, 3, 1))) _ 
          + (Val(Mid(Barcode, 5, 1))) _ 
          + (Val(Mid(Barcode, 7, 1))) 

    If Right(Str(300 - checkDigitSubtotal), 1) <> Right(Barcode, 1) Then 
     Validate_UPC = "EAN8-BAD" 
     Exit Function 
    End If 
    Validate_UPC = "EAN8-GOOD" 
    Exit Function 
End If 
+0

EAN 13を試してみたところ、うまくいっていると思います。私はEAN-14を知りません。 – toofaced

0

それは私が次のように3を乗じ奇妙なものを切り替えたときに働いた:

If Len(Barcode) = 14 Then  
    checkDigitSubtotal = (Val(Mid(Barcode, 1, 1))) _ 
          + (Val(Mid(Barcode, 3, 1))) _ 
          + (Val(Mid(Barcode, 5, 1))) _ 
          + (Val(Mid(Barcode, 7, 1))) _ 
          + (Val(Mid(Barcode, 9, 1))) _ 
          + (Val(Mid(Barcode, 11, 1))) _ 
          + (Val(Mid(Barcode, 13, 1))) 
     checkDigitSubtotal = (3 * checkDigitSubtotal) _ 
          + (Val(Mid(Barcode, 2, 1))) _ 
          + (Val(Mid(Barcode, 4, 1))) _ 
          + (Val(Mid(Barcode, 6, 1))) _ 
          + (Val(Mid(Barcode, 8, 1))) _ 
          + (Val(Mid(Barcode, 10, 1))) _ 
          + (Val(Mid(Barcode, 12, 1))) 

    If Right(Str(300 - checkDigitSubtotal), 1) <> Right(Barcode, 1) Then 
     Validate_UPC = "EAN14-BAD" 
     Exit Function 
    End If 
     Validate_UPC = "EAN14-GOOD" 
     Exit Function 
    End If 
関連する問題