Sub URL_Cod39(Testo As String, CheckDigit As Boolean, Titolo As Boolean, Larghezza As Long , Altezza As Long ) As String
Dim myreturn As String
Dim StrBin As String
Dim Url1 As String
Dim Url2 As String
Dim Url3 As String
Dim Url4 As String
Url1 = "http://chart.apis.google.com/chart?"
Url2 = "chbh=1,0,0&chs="
Url3 = "&cht=bvg&chco=000000&chds=0,1&chd=s:"
If Titolo Then
Url4 = "&chtt=" & Testo.ToUpperCase
Altezza = Altezza + 30
End If
If VerificaTestoCod39(Testo) Then
Else
Dim mystring As String
If CheckDigit Then
mystring = CheckDigit39(Testo, True)
Testo = Testo & mystring
End If
Dim mytesto As String
mytesto =("*" & Testo & "*")
StrBin = Cod39Codifica(mytesto.touppercase)
myreturn = Url1 & Url2 & Larghezza & "x" & Altezza
myreturn = myreturn & Url3 & StrBin
myreturn = myreturn & Url4
Return myreturn
End If
End Sub
Sub VerificaTestoCod39(Testo As String) As Boolean
'-------------------------------------------------------
'Nel caso un carattere NON sia valido la funzione
'restituisce VERO
'-------------------------------------------------------
Return Regex.IsMatch("[^ %&*+-./$0-9A-Z]",Testo)
're.Pattern = "[^ %&*+-./$0-9A-Z]"
're.ignorecase = False
're.Global = True
'
'If Len(Testo) = 0 Then
' VerificaTestoCod39 = True
'Else
' VerificaTestoCod39 = re.test(Testo)
'End If
End Sub
Sub Cod39Codifica(Testo As String) As String
'-------------------------------------------------------
'Tabella di decodifica del codice 39
'
'Assegna ad ogni carattere del testo da decodificare
'una combinazione binaria di 9+1 caratteri restituendo
'una stringa di testo binaria
'
'Da chiamare dopo aver verificato la validità di Testo
'con la funzione VerificaTestoCod39
'-------------------------------------------------------
Dim arrB() As Byte
Dim arrC(90) As String
Dim L As Long
Dim StrTemp As String, NewStr As String, s As String
Dim b As Int
arrC(32) = "0110001000" 'Spazio
arrC(36) = "0101010000" '$
arrC(37) = "0001010100" '%
arrC(42) = "0100101000" '*
arrC(43) = "0100010100" '+
arrC(45) = "0100001010" '-
arrC(46) = "1100001000" '.
arrC(47) = "0101000100" '/
arrC(48) = "0001101000" '0
arrC(49) = "1001000010" '1
arrC(50) = "0011000010" '2
arrC(51) = "1011000000" '3
arrC(52) = "0001100010" '4
arrC(53) = "1001100000" '5
arrC(54) = "0011100000" '6
arrC(55) = "0001001010" '7
arrC(56) = "1001001000" '8
arrC(57) = "0011001000" '9
arrC(65) = "1000010010" 'A
arrC(66) = "0010010010" 'B
arrC(67) = "1010010000" 'C
arrC(68) = "0000110010" 'D
arrC(69) = "1000110000" 'E
arrC(70) = "0010110000" 'F
arrC(71) = "0000011010" 'G
arrC(72) = "1000011000" 'H
arrC(73) = "0010011000" 'I
arrC(74) = "0000111000" 'J
arrC(75) = "1000000110" 'K
arrC(76) = "0010000110" 'L
arrC(77) = "1010000100" 'M
arrC(78) = "0000100110" 'N
arrC(79) = "1000100100" 'O
arrC(80) = "0010100100" 'P
arrC(81) = "0000001110" 'Q
arrC(82) = "1000001100" 'R
arrC(83) = "0010001100" 'S
arrC(84) = "0000101100" 'T
arrC(85) = "1100000010" 'U
arrC(86) = "0110000010" 'V
arrC(87) = "1110000000" 'W
arrC(88) = "0100100010" 'X
arrC(89) = "1100100000" 'Y
arrC(90) = "0110100000" 'Z
arrB = Testo.GetBytes("UTF8")
Dim j() As Byte
j = "a".GetBytes("UTF8")
For L = 0 To arrB.Length Step j.Length
StrTemp = StrTemp & arrC(arrB(L))
Next
For L = 1 To StrTemp.Length - 1
b = Bit.Xor(b,1)
'b = b Xor True
s = StrTemp.charat(L-1)
'S = Mid$(StrTemp, L, 1)
If b = 1 Then
If s = "0" Then
s = "9"
Else
s = "999"
End If
Else
If s = "0" Then
s = "A"
Else
s = "AAA"
End If
End If
NewStr = NewStr & s
Next
Return NewStr
End Sub
Sub CheckDigit39(Testo As String, _
Verifica As Boolean) As String
'-------------------------------------------------------
'Se il parametro opzionale è omesso o ha valore False
'la funzione restituisce il check digit(per codice 39)
'ovvero restituisce un carattere (string) che deve
'essere accodato a Testo.
'
'La funzione può viceversa essere utilizzata per il
'controllo del check digit (ultima cifra), in questo
'caso il parametro Verifica deve avere valore True
'e Testo deve essere comprensivo di carattere di
'controllo.
'La funzione una volta eseguita la verifica restituirà
'True se il check digit è corretto oppure False se è
'errato (come tipi boolean).
'
'La funzione è quindi utilizzabile sia in fase di
'lettura del codice a barre (Verifica = True) sia in
'scrittura (Verifica = False e conseguente restituzione
'del solo carattere di controllo)
'-------------------------------------------------------
Dim arrB() As Byte
Dim arrC(90) As String
Dim L As Long
Dim P As Long
Dim D As Long
Dim S As Long
Dim Temp As Byte
Dim StrTemp As String
Dim Pd As Boolean
arrC(48) = 0 '0
arrC(49) = 1 '1
arrC(50) = 2 '2
arrC(51) = 3 '3
arrC(52) = 4 '4
arrC(53) = 5 '5
arrC(54) = 6 '6
arrC(55) = 7 '7
arrC(56) = 8 '8
arrC(57) = 9 '9
arrC(65) = 10 'A
arrC(66) = 11 'B
arrC(67) = 12 'C
arrC(68) = 13 'D
arrC(69) = 14 'E
arrC(70) = 15 'F
arrC(71) = 16 'G
arrC(72) = 17 'H
arrC(73) = 18 'I
arrC(74) = 19 'J
arrC(75) = 20 'K
arrC(76) = 21 'L
arrC(77) = 22 'M
arrC(78) = 23 'N
arrC(79) = 24 'O
arrC(80) = 25 'P
arrC(81) = 26 'Q
arrC(82) = 27 'R
arrC(83) = 28 'S
arrC(84) = 29 'T
arrC(85) = 30 'U
arrC(86) = 31 'V
arrC(87) = 32 'W
arrC(88) = 33 'X
arrC(89) = 34 'Y
arrC(90) = 35 'Z
arrC(45) = 36 '-
arrC(46) = 37 '.
arrC(32) = 38 'SPAZIO
arrC(36) = 39 '$
arrC(47) = 40 '/
arrC(43) = 41 '+
arrC(37) = 42 '%
If Verifica Then
StrTemp = Right(Testo, 1)
Testo = Left(Testo, Testo.Length - 1)
End If
arrB = Testo.GetBytes("UTF8")
S = "A".GetBytes("UTF8").Length
For L = 0 To arrB.Length Step S
Temp = arrB(L)
Select Temp
Case 32, 36, 37, 42, 43
Case 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57
Case 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90
Case Else
Msgbox(Chr(Temp) & " is geen juiste karakter" & Chr(13) & _
"Welke karakters zijn juist : " & _
Chr(13) & _
"Spatie $ % + - . /" & _
Chr(13) & _
"0 1 2 3 4 5 6 7 8 9" & _
Chr(13) & _
"A B C D E F G H I J " & _
"K L M N O P Q R S " & _
"T U V W X Y Z","error")
End Select
D = D + arrC(Temp)
Next
P = D Mod 43
If Verifica Then
If CStr(P) = StrTemp Then
Return
'Return
Else
Return
'Return
End If
End If
D = arrC.Length
For S = 32 To D
If arrC(S) = CStr(P) Then
Return Chr(S)
'return
End If
Next
End Sub
Sub Right(Text As String, Length As Long) As String
If Length>Text.Length Then Length=Text.Length
Return Text.SubString(Text.Length-Length)
End Sub
Sub Left(Text As String, Length As Long)As String
If Length>Text.Length Then Length=Text.Length
Return Text.SubString2(0, Length)
End Sub
Sub CStr(i As Int) As String
Return "" & i
End Sub