【发布时间】:2016-12-08 15:42:13
【问题描述】:
我正在尝试在 vba 访问中验证 EAN 14 UPC 代码。我试图在网上找到它,但没有运气。我刚刚找到了 EAN 8 和 EAN 13。所以,我只是尝试将其编码为类似于 EAN 13,如下所示:
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。我认为我的验证代码不起作用。我刚刚添加了最后一行
+ (Val(Mid(Barcode, 13, 1)))
关于 EAN13 验证码。请帮忙。
【问题讨论】:
-
不应将第一个小计乘以 3。而应将第二个小计乘以 3,即奇数位的数字。
-
@Codo:仅适用于 EAN-14 吗?因为当我像上面显示的那样编码时它适用于 EAN-8 和 EAN-13?
-
GS1 解释了如何calculate a check digit。如果您从第一个数字到倒数第二个数字,它会改变偶数或奇数数字是否乘以 3。如果您向后工作,它在不同的 EAN 代码长度之间更加一致。
标签: ms-access vba check-digit ean-13