Sub Globals
Dim decoders As Map
Dim FNC1 As String = Chr(29) ' se vuoi puoi cambiare Chr(29) con "-"
End Sub
Sub Activity_Create(FirstTime As Boolean) 'ignore
' creo mappa dei decoders
decoders.Initialize
' Lnn = fixed length, nn digits
' Fnn = float, nn digit
' Vnn = variable, nn max length
' D6 = date
' https://it.wikipedia.org/wiki/GS1-128
decoders.Put("00","L18")
decoders.Put("01", "L14")
decoders.Put("02", "L14")
decoders.Put("10", "V20")
decoders.Put("11", "D6")
decoders.Put("12", "D6")
decoders.Put("13", "D6")
decoders.Put("15", "D6")
decoders.Put("17", "D6")
decoders.Put("20", "L2")
decoders.Put("21", "V20")
decoders.Put("22", "V29")
' ....... qui lascio a te aggiungere tutti gli altri che ti servono
decoders.Put("30", "V8")
' da 310 a 369 sono tutti Float, non serve definirli
' da 390 a 394 sono tutti Float variabili, non serve definirli
'....
'....
decoders.Put("415", "L13")
decoders.Put("416", "L13")
decoders.Put("8020", "V25")
' eccetera eccetera, devi aggiungere tutti quelli che ti servono
' --------------------------------------------------------------------
' test di decodifica
Dim mappa As Map = Decodifica("010123456789012810123456789" & FNC1 & "21987654321")
Log(mappa)
Dim mappa As Map = Decodifica("01980081105541283103009140172309201002743989")
Log(mappa)
Dim mappa As Map = Decodifica("41580320890098748020123456789123456789392205799")
Log(mappa)
Dim mappa As Map = Decodifica("01080320890000173103002584392200646")
Log(mappa)
Dim mappa As Map = Decodifica("01080320890000173103002584392200646" & FNC1 & "393200314")
Log(mappa)
ExitApplication
End Sub
Sub Decodifica(codice As String) As Map
' F = fix
' D = decimal
' V = variable
' D = date
Dim mappa As Map
mappa.Initialize
Do While codice <> ""
If codice.StartsWith(FNC1) Then
codice = codice.SubString(1)
If codice = "" Then Exit
End If
' ----------------------------------------------------------------------------------------
' per primo cerco i codici a due cifre
Dim cod As String = codice.SubString2(0, 2)
Dim decoder As String = decoders.Get(cod)
If decoder = "null" Then
cod = codice.SubString2(0, 3) ' ora cerco quelli a 3 cifre
decoder = decoders.Get(cod)
If decoder = "null" Then
Dim codInt As Int = cod
If codInt >= 310 And codInt <= 369 Then ' prima di tutto controllo che non siano i valore Float
decoder = "F6"
End If
If codInt >= 390 And codInt <= 394 Then ' controllo che non sia un Float Variabile
decoder = "F0" ' float a lunghezza variabile
End If
If decoder = "null" Then
' provo con quelli a 4 cifre
cod = codice.SubString2(0, 4)
decoder = decoders.Get(cod)
If decoder = "null" Then
Msgbox("Codice AI " & cod & " non riconosciuto", "ERRORE") 'ignore
Return Null
End If
End If
End If
End If
Dim len As Int = decoder.SubString(1)
Select decoder.SubString2(0, 1) ' estraggo il tipo (L, F, D, V)
Case "L" ' lunghezza fissa
mappa.Put(cod, codice.SubString2(cod.Length, cod.Length + len))
codice = codice.SubString(cod.Length + len)
Continue
Case "F" ' float
Dim decimali As Int = codice.SubString2(cod.Length, cod.Length + 1)
Dim valore As String
If len = 0 Then ' lunghezza variabile
Dim vn As String = codice.SubString(cod.Length + 1).IndexOf(FNC1)
If vn = -1 Then
valore = codice.SubString(cod.Length + 1)
len = valore.Length
Else
valore = codice.SubString2(cod.Length + 1, cod.Length + 1 + vn)
len = codice.SubString2(cod.Length, cod.Length + vn).Length + 1
End If
Else
' lunghezza fissa
valore = codice.SubString2(cod.Length + 1, cod.Length + 1 + len)
End If
Dim intero As String = valore.SubString2(0, valore.Length - decimali)
Dim frazione As String = valore.SubString(intero.Length)
Dim valoreFloat As Float = intero & "." & frazione
mappa.Put(cod, valoreFloat)
codice = codice.SubString(cod.Length + 1 + len)
Continue
Case "D" ' data ddMMyy
DateTime.DateFormat = "ddMMyy"
Dim data As String = codice.SubString2(cod.Length, cod.Length + len)
Dim dataLong As Long = DateTime.DateParse(data)
mappa.Put(cod, dataLong)
codice = codice.SubString(cod.Length + len)
Continue
Case "V" ' variabile
Dim vn As String = codice.SubString(cod.Length).IndexOf(FNC1)
If vn = -1 Then
mappa.Put(cod, codice.SubString(cod.Length))
codice = ""
Else
mappa.Put(cod, codice.SubString2(cod.Length, cod.Length + vn))
codice = codice.SubString(cod.Length + vn + 1)
End If
Continue
End Select
Loop
Return mappa
End Sub