在MES系统中,条码的使用概率几乎是100%。MES通过在生产过程中接收产品条码,来达到记录和防错的目的。当扫描枪扫描到一个条码,传入MES软件中的时候,MES软件就要去判断这个条码是否符合规则。如何判断呢?这里提供一个方法。
首先,条码的编码规则无非就是0-9和A-Z的混排,当中包含固定字符和流水号,我们可以把所有条码表示成"#$*",#代表字符,$代表数字,*代表任何字符。这样几乎所有的条码都可以使用一个函数去识别了。例如:有一个条码"ABC1234CHINA0001",其中,ABC是字母,1234是数字,CHINA是固定字符,0001是流水号,那我们可以这样表示:###$$$$CHINA$$$$,如果有超出数字和字母之外的字符,可以用*号表示。基于上述基础,我们可以编制函数,检查条码。函数的原理是,传入条码和条码的表达式,首先检查条码的长度和表达式的长度是否一样,如果不符合,就报错,如果长度符合,那么就开始逐个检查每个字符,有任何一个不符合就报错。函数如下:
Public Function VerifyBarcodeFormat(VerifyStr As String, FormatStr As String) As Boolean
Dim CharStrA, CharStrB As String
Dim CharFlag As Boolean
Dim i, StrLen, StrLen2, AscVal As Integer
VerifyStr = UCase(VerifyStr)
StrLen = Len(VerifyStr)
StrLen2 = Len(FormatStr)
If StrLen = StrLen2 Then
CharFlag = True
For i = 1 To StrLen
CharStrA = Mid(VerifyStr, i, 1)
CharStrB = Mid(FormatStr, i, 1)
If CharStrB = "$" Then
AscVal = Asc(CharStrA)
If AscVal <= 64 Or AscVal >= 91 Then
CharFlag = False
i = StrLen
VerifySnFormat = False
End If
Else
If CharStrB = "#" Then
CharFlag = IsNumeric(CharStrA)
If CharFlag = False Then
i = StrLen
VerifySnFormat = False
End If
Else
If CharStrB = "*" Then
Else
If CharStrA <> CharStrB Then
CharFlag = False
i = StrLen
VerifySnFormat = False
End If
End If
End If
End If
Next i
If CharFlag = True Then
VerifySnFormat = True
Else
VerifySnFormat = False
MsgBox "Incorrect Barcode Format, Should Be " & FormatStr, vbInformation, "Tips"
End If
Else
VerifySnFormat = False
MsgBox "Incorrect Character quantity, Should Be " & StrLen2, vbInformation, "Tips"
End If
End Function
例如,上述的例子,只需要使用函数VerifyBarcodeFormat("ABC1234CHINA0001","###$$$$CHINA$$$$")验证即可。