包括最后一位校验码哪位大大帮帮我?假设 69096121121 一共十二位,在TEXT控件中 显示出 6909612112115 (最后一位5是通过条形码公式计算出来的)--------------------------
条形码公式,偶数位 相加 再乘 3
从第三位起奇数位相加
以上两者再加
如果和正好是10的倍数,则用倍数减4 得最后一位 130 13-4=9
否则取10整数倍 相减 得最后一位  128 130-128=2 

解决方案 »

  1.   

    Dim strBarcode As String
    Dim i As Integer
    Dim intSum1 As Integer, intSum2 As IntegerstrBarcode = "690961211211"For i = 1 To 12
        If (i Mod 2) = 0 Then
            intSum1 = intSum1 + Val(Mid(strBarcode, i, 1))
        End If
        
        If i Mod 2 Then
            intSum2 = intSum2 + Val(Mid(strBarcode, i, 1))
        End If
    Next iintSum1 = intSum1 * 3 + intSum2If intSum1 Mod 10 Then
        intSum2 = ((intSum1 + 5) \ 10) * 10
        Text1 = strBarcode & (intSum2 - intSum1)
    Else
        Text1 = strBarcode & (intSum1 / 10 - 4)
    End If
      

  2.   

    第3位开始奇数相加 所得结果是6909612112111
    而重第1位开始奇数相加 所得结果是6909612112115下面是重第3位奇数相加的代码Private Sub Command1_Click()
    Dim str As String
    str = "690961211211"Text1.Text = str & tiaoXinMa(str)
    End SubFunction tiaoXinMa(ByVal str As String) As Integer
    Dim i As Integer
    Dim sum1 As Integer
    Dim sum2 As IntegerFor i = 1 To 13
        If i Mod 2 = 0 Then
         sum1 = sum1 + Val(Mid(str, i, 1))
        Else
            If i >= 3 Then
             sum2 = sum2 + Val(Mid(str, i, 1))
            End If
        End If
    Nextsum1 = sum1 * 3 + sum2If sum1 Mod 10 = 0 Then
        sum1 = sum1 / 10 - 4
    Else
        sum1 = (((sum1 + 10) \ 10) * 10) - sum1
    End IftiaoXinMa = sum1
    End Function
      

  3.   


    Function GetEANCode(strBarcode As String, Optional EAN As Long = 13) As String
        'strBarcode 输入的条码 / EAN 分为8位和13位
        
        Dim i As Long, q As Long, o As Long
        Dim s As String
        Dim tmp As Long
        
        s = Trim(strBarcode)
        If Not IsNumeric(Trim(s)) Then Exit Function
        If Len(s) < EAN - 1 Or Len(s) > EAN Then
            'MsgBox "输入数据不正确"
            Exit Function
        End If
        s = Left(s, EAN - 1)
        strBarcode = s
        s = "0" & StrReverse(s)     '反向
        '条码位置序号 13 12 11 10 9 8 7 6 5 4 3 2 1
        '因为EAN码有13位和8位之分,反向后才能保证奇偶位正确
        
        For i = 2 To Len(s)
            tmp = Mid(s, i, 1)
            If i Mod 2 = 0 Then
                o = o + tmp             '偶位数相加
            Else
                q = q + tmp             '奇位数相加
            End If
        Next
        tmp = (o * 3) + q               '偶位数之和乘3加奇位数之和
        tmp = 10 - Right(CStr(tmp), 1)  '10减去上面的个位数,得到校验码
        
        GetEANCode = strBarcode & Right(CStr(tmp), 1)  '校验码10取0End Function
      

  4.   


    Option ExplicitPrivate Sub Command1_Click()
        Dim str As String
        str = "690961211211"
        Dim sum As Integer, i As Integer
        sum = 0
        For i = 0 To Len(str) / 2 - 1
            sum = sum + Mid(str, 2 + 2 * i, 1)
        Next
        sum = sum * 3
        For i = 0 To Len(str) / 2 - 2'奇数从第三位开始,最后一位结果是1
            sum = sum + Mid(str, 3 + 2 * i, 1)
        Next
        'For i = 0 To Len(str) / 2 - 2'奇数从第一位开始,最后一位结果是5
            'sum = sum + Mid(str, 3 + 2 * i, 1)
        'Next
        If sum Mod 10 = 0 Then
            sum = sum / 10 - 4
        Else
            sum = (sum \ 10 + 1) * 10 - sum
        End If
        Text1.Text = str & CStr(sum)
    End Sub同意3楼,LZ的结果给错了
      

  5.   

    楼主的给的示例数据是正确的...EAN码是有规则的:
    条码位置序号是: 13 12 11 10 9 8 7 6 5 4 3 2 1   并不是顺序的...
    其中,1位是校验码,就是楼主要求的结果...
      

  6.   

    回头试试。6909612112115 是可口可乐355mL装的条码。我一直用这个做所有VB程序的测试用。THX 以上