2016-12-08 14 views
0

Я пытаюсь проверить код UPC EAN 14 в доступе vba. Я пытаюсь найти его в Интернете, но не повезло. Я только что нашел для 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. Я думаю, что мой код проверки не работает. Я только что добавил последнюю строку + (Val(Mid(Barcode, 13, 1))) на EAN13 код проверки. Пожалуйста помоги.

+0

Вы не должны умножить первый подытог с 3. Вместо этого вы должны умножить второй подытог с 3, то есть цифры на нечетных позициях. – Codo

+0

@Codo: Это только для EAN-14? Потому что он работает для EAN-8 и EAN-13, когда я закодирован, как показано выше? – toofaced

+0

GS1 объясняет, как [вычислить контрольную цифру] (http://www.gs1.org/how-calculate-check-digit-manual). Если вы работаете от первой до второй последней цифры, она меняет, умножаются ли четные или четные цифры на 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