Autore Topic: ean13  (Letto 1049 volte)

Offline domenico

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
ean13
« il: 07 Luglio 2016, 13:01:15 »
Buonasera ragazzi. ho un problema sulla generazione dell'ean 13. il codice lo genera ma omette la prima cifra e l'ultima se la inventa! come mai ??. il codice che uso è quello di pdf writer. Potete aiutarmi?

Codice: [Seleziona]
Public Sub EAN13(x As Float, y As Float, barcode As String, Optional h As Float = 16, Optional w As Float = 0.35)

  _Barcode(x, y, barcode, h, w, 13)
 
End

Private Function _TestCheckDigit(barcode As String) As Boolean
  Dim sum, i As Integer
  'Test validity of check digit
  sum = 0
  For i = 2 To 12 Step 2
    sum += 3 * Val(Mid(barcode, i, 1))
  Next
  For i = 1 To 11 Step 2
    sum += Val(Mid(barcode, i, 1))
  Next
  Return (sum + Val(Mid(barcode, 13, 1)) Mod 10 == 0)
End

'Barcodes (Olivier)


Private Sub _Barcode(x As Float, y As Float, barcode As String, h As Float, w As Float, length As Integer)
Dim codes, parities As Collection
  Dim p As String[]
  Dim i As Integer
  Dim code As String
 
  'Padding
  barcode = Right(String(length - 1, "0") & barcode, length - -1)
  If (length = 12) Then barcode = "0" & barcode
  'Add or control the check digit
  If (Len(barcode) = 12) Then
    barcode &= _GetCheckDigit(barcode)
  Else If (Not _TestCheckDigit(barcode)) Then
    Error.Raise("Incorrect check digit")
  End If
  'Convert digits to bars
  codes = New Collection
  codes.Add(["0001101", "0011001", "0010011", "0111101", "0100011",
             "0110001", "0101111", "0111011", "0110111", "0001011"], "A")
  codes.Add(["0100111", "0110011", "0011011", "0100001", "0011101",
             "0111001", "0000101", "0010001", "0001001", "0010111"], "B")
  codes.Add(["1110010", "1100110", "1101100", "1000010", "1011100",
             "1001110", "1010000", "1000100", "1001000", "1110100"], "C")
  parities = New Collection
  parities.Add(["A", "A", "A", "A", "A", "A"], "0")
  parities.Add(["A", "A", "B", "A", "B", "B"], "1")
  parities.Add(["A", "A", "B", "B", "A", "B"], "2")
  parities.Add(["A", "A", "B", "B", "B", "A"], "3")
  parities.Add(["A", "B", "A", "A", "B", "B"], "4")
  parities.Add(["A", "B", "B", "A", "A", "B"], "5")
  parities.Add(["A", "B", "B", "B", "A", "A"], "6")
  parities.Add(["A", "B", "A", "B", "A", "B"], "7")
  parities.Add(["A", "B", "A", "B", "B", "A"], "8")
  parities.Add(["A", "B", "B", "A", "B", "A"], "9")
 
  code &= "101"
  p = parities[Mid(barcode, 1, 1)]


  For i = 1 To 6
    code &= codes[p[i - 1]][Val(Mid(barcode, i, 1))]
 
  Next
  code &= "01010"
 
 
  For i = 7 To 12
    code &= codes["A"][Val(Mid(barcode, i, 1))]
 
 
 
  Next
  code &= "101"
  'Draw bars
  For i = 1 To Len(code)
    If (Mid(code, i, 1) = "1") Then Me.Rect(x + (i - 1) * w, y, w, h, "F")
  Next
  'Print text uder barcode
  Me.SetFont("Arial", "", m1.fstamp)
 
  Me.Text(x, y + h + 11 / $k, Right(barcode, length))
End
« Ultima modifica: 07 Luglio 2016, 13:34:56 da domenico »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:ean13
« Risposta #1 il: 07 Luglio 2016, 13:18:03 »
Sei pregato di non postare lo stesso argomento in più punti (ho rimosso quello in Gambas2 perché presumo tu abbia Gambas3).

Il codice va inserito fra i cancelletti (#) per favore cerca di seguire le regole, grazie.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline domenico

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re:ean13
« Risposta #2 il: 07 Luglio 2016, 13:30:49 »
Chiedo scusa, mi sono accorto che avevo postato in gambas 2 ma non sono riuscito ad eliminare il posto. Per quanto riguarda il codice non sapevo questa regola! Scusate!

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:ean13
« Risposta #3 il: 07 Luglio 2016, 13:35:00 »
Di niente, figurati.
Ti basta andare sul vecchio post e cliccare su Modifica, quindi evidenzi il codice e clicchi sui cancelletti.
Ciao

Perfetto!

Riguardo al tuo quesito occorre aspettare un esperto (Golia  ;D)
« Ultima modifica: 07 Luglio 2016, 13:38:32 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline domenico

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re:ean13
« Risposta #4 il: 07 Luglio 2016, 13:37:38 »
Si, fatto, grazie! :)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:ean13
« Risposta #5 il: 07 Luglio 2016, 16:25:31 »
Ciao
Mi spiace per te ma non sono un'esperto come dice gianluigi.. sopratutto per i codici a barre, mai usati.
Siccome il vero esperto e creatore di Pdfwriter non si fà vivo spesso  (Ciao MD :ciao:) cerchiamo di capire come funzica sta roba.
Ho provato a modificare il codice, in effetti in questa riga.. (Nella sub _Barcode)
Codice: [Seleziona]
barcode = Right(String(length - 1, "0") & barcode, length - 1)
se a length non viene tolto l'ultimo carattere, quasi tutto funziona...quasi
se togli queste 2 righe
Citazione
'   Else If (Not _TestCheckDigit(barcode)) Then
'     Error.Raise("Incorrect check digit")
Sembra funzionare.. sembra perchè come ti ho detto non conosco i codici a barre.
Comunque la sub _Barcode è richiamata solo da EAN13 e UPC_A che mi sembra funzionano
Prova e fammi sapere, per favore prova anche altri codici a barre per vedere se ci sono anomalie.
Allego PdfWriter con tutti gli esempi, ho aggiunto anche EAN13 e UPC_A
Ciao  :2birre:
Allego

Offline domenico

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re:ean13
« Risposta #6 il: 07 Luglio 2016, 18:15:29 »
Ciao golia, grazie per la risposta! Ho provato il codice e scrive bene (almeno x la parte numerica), ma ho provato a sparare con il lettore senza nessun risultato. Non legge. Quelli che ho testato sono stati ean13, upc, i25 e code39. L'unico che il lettore riesce a leggere è il code39.

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:ean13
« Risposta #7 il: 07 Luglio 2016, 19:14:01 »
Mi spiace ma non saprei come aiutarti
prova a dare un'occhiata quà http://www.fpdf.org/en/script/script5.php, pdfwriter è un porting di questo.
Ciao

Offline domenico

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re:ean13
« Risposta #8 il: 07 Luglio 2016, 20:25:49 »
Ho modificato questo codice


Codice: [Seleziona]
Private Function _GetCheckDigitOriginale(barcode As String) As String
  Dim sum, i, r As Integer
  'Compute the check digit
  sum = 0
  For i = 2 To 12 Step 2
    sum += 3 * Val(Mid(barcode, i, 1))
  Next
  For i = 1 To 11 Step 2
    sum += Val(Mid(barcode, i, 1))
  Next
  r = sum Mod 10
  If (r > 0) Then r = 10 - r
  Return Str(r)
End



codice modificato

Codice: [Seleziona]
domenico

Private Function _GetCheckDigit(barcode As String) As String
 
   Dim sum, i, r As Integer
  'Compute the check digit
  sum = 0
  For i = 2 To 12 Step 2
    sum = sum + Val(Mid(barcode, i, 1))
  Next
  For i = 1 To 11 Step 2
    sum = sum + Val(Mid(barcode, i, 1))
  Next
  r = sum Mod 10
  If (r > 0) Then r = 10 - r
  Return Str(r)
End


abbiamo fatto un passo avanti. adesso lo legge. però sulla lettura ho il problema iniziale. omette il primo numero e si inventa l'ultimo!

Offline domenico

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re:ean13
« Risposta #9 il: 07 Luglio 2016, 21:52:27 »
ragazzi, ho notato anche un altro particolare. Il lettore legge il codice a barre solamente se c'è il 4 come primo numero. Se il codice a barre è 4578698742156 il lettore mi legge 4457869874215

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:ean13
« Risposta #10 il: 08 Luglio 2016, 09:26:37 »
Citazione
abbiamo fatto un passo avanti. adesso lo legge. però sulla lettura ho il problema iniziale. omette il primo numero e si inventa l'ultimo!
intendi che lo stampa corretto ma quando lo leggi con la pistola trasla a dx tutto il codice?
Forse cambiando il codice abbiamo solo sistemato il testo sotto, bisogna vedere dove sposta i caratteri sopra

Offline domenico

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re:ean13
« Risposta #11 il: 08 Luglio 2016, 10:02:24 »
si, facendo quella modifica abbiamo cambiato il codice che esce sotto. Comunque si,viene translato a dx

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:ean13
« Risposta #12 il: 08 Luglio 2016, 10:23:20 »
Ciao Domenico,

scusa se mi intrometto in cose che poco conosco e che ho dimenticato, ma tu se stampi su l'editor di testo il codice a barre si stampa correttamente? La pistola funziona bene?

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline domenico

  • Gamberetto
  • *
  • Post: 36
    • Mostra profilo
Re:ean13
« Risposta #13 il: 08 Luglio 2016, 11:48:17 »
si si, la pistola funziona bene. era venuto anche a me questo dubbio ma l'ho testata, riconfigurata e va bene.!

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:ean13
« Risposta #14 il: 11 Luglio 2016, 16:08:13 »
Prova un po a stampare il tuo codice ean13 qui.
 :ciao:

Ho rimosso un post frutto del troppo caldo  ;D
« Ultima modifica: 12 Luglio 2016, 17:57:47 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro