首页 ExcelVBA集装箱号校验公式
文章
取消

ExcelVBA集装箱号校验公式

集装箱号(Container Number),也称为集装箱编码,是用于标识集装箱的唯一标识符。集装箱是一种用于装载货物并方便运输的大型金属箱子,常用于海陆空运输。集装箱号是一种用于跟踪和识别集装箱的编号系统,以确保货物在运输过程中的安全性和可追踪性。

  • 集装箱号通常由一串字母和数字组成,具体的格式可以根据国际标准(ISO 6346)或各个运输公司的规定而有所不同。ISO 6346标准定义了一种集装箱标识码,通常被称为“BIC码”(Bureau International des Containers et du Transport Intermodal code),它由11个字符组成,包括四个字母作为公司代码,七个字符作为唯一编号。

  • 以下是一个集装箱号的示例:
    • ISO 6346格式(BIC码): ABCU1234567
    • 非ISO格式(运输公司自定义): XYZ4567890
  • 集装箱号在国际贸易和运输中起到了关键的作用:

    • 货物追踪: 集装箱号能够帮助船运公司、货代、货主等各方追踪和识别特定的集装箱,从出发港到目的港的整个运输过程中都可以跟踪。

    • 安全性: 集装箱号可以与货物信息关联,有助于确保正确的货物被装载、卸载和运输,防止货物遗失或混淆。

    • 海关申报: 集装箱号通常需要在运输文件和海关文件中提供,以满足相关法规和要求。

    • 船舶计划: 船公司使用集装箱号来规划船只的装载和卸载顺序,以最大程度地提高效率。

    • 保险索赔: 在货物损失或损坏的情况下,集装箱号可以用于提交保险索赔。

  • 总之,集装箱号在现代国际物流和运输中扮演着至关重要的角色,确保货物的安全、追踪和准确的记录。

方法一:

Function jzxh(xh)
xh = Application.WorksheetFunction.Trim(xh)
    Dim a(1 To 2, 1 To 36) As Integer
    Dim i As Integer, j As Integer, n As Long
   
    If Len(xh) <> 11 Then
        jzxh = "集装箱号无效"
        Exit Function
    End If
   
    xh = LCase(xh)
   
    n = 9
    For i = 0 To 35
        If i < 10 Then
            a(1, i + 1) = i + 48
            a(2, i + 1) = i
        Else
            n = n + 1
            a(1, i + 1) = 87 + i
            If n Mod 11 = 0 Then n = n + 1
            a(2, i + 1) = n
            
        End If
    Next
   
    n = 0
    For i = 1 To 10
        For j = 1 To 36
   
                If Asc(Mid(xh, i, 1)) = a(1, j) Then
                    n = n + a(2, j) * 2 ^ (i - 1)
                    Exit For
                End If
        Next
        If j = 37 Then
            jzxh = "集装箱号无效"
            Exit Function
        End If
    Next
   
    If n Mod 11 = Val(Right(xh, 1)) Then
        jzxh = "效验正确"
    Else
        jzxh = "箱号错误"
    End If

End Function

方法二:

Public Function VerifyContainerCode(ByVal strCode As String) As Boolean
Const Charcode As String = "0123456789A?BCDEFGHIJK?LMNOPQRSTU?VWXYZ"
Dim i As Long, n As Long, sum As Long
 
If Len(strCode) <> 11 Then Exit Function
 
For i = 1 To 10
    n = InStr(1, Charcode, UCase(Mid(strCode, i, 1))) - 1
    If n = -1 Or Mid(strCode, i, 1) = "?" Then Exit Function
    n = n * 2 ^ (i - 1)
    sum = sum + n
Next i
sum = (sum Mod 11) Mod 10
 
If Val(Mid(strCode, 11, 1)) = sum Then VerifyContainerCode = True

End Function



Public Function ZCode(ByVal strCode As String) As String
Const Charcode As String = "0123456789A?BCDEFGHIJK?LMNOPQRSTU?VWXYZ"
Dim i As Long, n As Long, sum As Long


strCode = Application.WorksheetFunction.Trim(strCode)

If Len(strCode) <> 11 Then Exit Function
 
For i = 1 To 10
    n = InStr(1, Charcode, UCase(Mid(strCode, i, 1))) - 1
    If n = -1 Or Mid(strCode, i, 1) = "?" Then Exit Function
    n = n * 2 ^ (i - 1)
    sum = sum + n
Next i
sum = (sum Mod 11) Mod 10
If Val(Mid(strCode, 11, 1)) = sum Then
ZCode = "效验正确"
Else
ZCode = "箱号错误"
End If
End Function

ExcelVBA全局唯一标识符GUID

ExcelVBA统一信用代码校验