| |
|
|
Thomas Zielinski | ¡Hola, el EAN13 Barcode es no simplemente sólo una Folge de umgewandelten Pagar en Striche pero unterliegt algunos Regeln. Natürlich darf él auch no simplemente munter en él los genutzt voluntad pero unterliegt el Vergabe entsprechender Länderstellen. EAN 13 Codes el con uno 2 Anfangen son allerdings para una flexibleren Einsatz como a el Wursttheke oder en el Gemüseabteilung reserviert.
Ein EAN13 Code besteht de 13 Ziffern. El ersten 2 a 3 Ziffern geben el Land el Edición a, gefolgt de uno 5- oder 7-Stelligen Betriebsnummer, el real Artikelnummer y a 13. Punto una Prüfzahl.
Für cada Stellen 0-9 hay jeweils 3 mögliche Anordnungen el Balken abhängig de Ihrer Position en el Barcode y ersten Ziffer. El erste Ziffer no es direkt traducido, pero ergibt se de el Anordnung el Ziffern 2 a 7. El Ziffern 8 a 13 voluntad aber siempre después de el selben Schema erstellt.
Der beigefügte Quellcode es tal vez no sonderlich elegant gelöst, aber funktioniert para mein Projekt.
//EAN 13 Code
//Thomas Zielinski - Oktober 2021
// Links Rechts Parität
// Ungerade Gerade Rechts 1. Ziffer
//0: 0001101 0100111 1110010 UUUUUU
//1: 0011001 0110011 1100110 UUGUGG
//2: 0010011 0011011 1101100 UUGGUG
//3: 0111101 0100001 1000010 UUGGGU
//4: 0100011 0011101 1011100 UGUUGG
//5: 0110001 0111001 1001110 UGGUUG
//6: 0101111 0000101 1010000 UGGGUU
//7: 0111011 0010001 1000100 UGUGUG
//8: 0110111 0001001 1001000 UGUGGU
//9: 0001011 0010111 1110100 UGGUGU
//Aufbau: Start - 6 Ziffern Links - Mitte - 6 Ziffern Rechts - Ende
//El erste Ziffer ergibt se de el Verteilung el Ziffern 2 a 7 gemäß el Tabla si una gerade oder una ungerade Quersumme angewandt se.
//101 2. 3. 4. 5. 6. 7. 01010 8. 9. 10. 11. 12. 13. 101
//101 U U G G U G 01010 R R R R R R 101 <- 2. a 7. Ob U oder G siehe Parität (Im Ejemplo hier el 2)
//El 1. Zahl debería siempre una 2 ser. Todos los demás Ziffern son por el EAN Ländern zugeordnet y sólo después de Vergabe nutzbar. El 2 aber es para el Einzellhandel y kann cualquier genutzt voluntad.
// El 13. Zahl es una Prüfziffer y errechnet se de Modulo10((1.+3.+5.+7.+9.+11.)+((2.+4.+6.+8.+10.+12.)*3)); Caso negativo erg% == 0 Then erg% = 10-erg%
// Lo verbleiben also sólo 11 Ziffern para vergeben si uno no Nummer zugewiesen bekommen ha. Therotisch kann el 2. Ziffer en el 2él-Zona ebenfalls por el Zuständige Vergabestelle vorgegeben ser. Das Ignoriere Yo hier aber.
// En Zuweisung bekommt uno de paso sólo el ersten 5 o 7 Ziffern zugewiesen. El Restlichen Ziffern puede frei gewählt voluntad, wobei el 13. el Prüfziffer es.
Declarar Nummern$, Ziffern%[], i%, EAN$, ErstCode$[]
CLS
//Paritätstabelle
ErstCode$[0] = "UUUUUU"
ErstCode$[1] = "UUGUGG"
ErstCode$[2] = "UUGGUG"
ErstCode$[3] = "UUGGGU"
ErstCode$[4] = "UGUUGG"
ErstCode$[5] = "UGGUUG"
ErstCode$[6] = "UGGGUU"
ErstCode$[7] = "UGUGUG"
ErstCode$[8] = "UGUGGU"
ErstCode$[9] = "UGGUGU"
Imprimir "Geben Sie 12 Ziffern una:"
Imprimir "Die erste Nummer debería una 2 ser para el Einzelhandel."
Entrada Nummern$
//Nummern$ = "269854713256"
//ACHTUNG! Hier no Prüfung en plausibilität. Empfehle Yo aber dringend.
i% = 0
For i%,12
Ziffern%[i%] = Substr$(Nummern$,i%)
Imprimir "Ziffer " + Str$(i%)+": "+Str$(Ziffern%[i%])
EndFor
//Prüfziffer berechnen
Ziffern%[13] = 10-(((Ziffern%[1]+Ziffern%[3]+Ziffern%[5]+Ziffern%[7]+Ziffern%[9]+Ziffern%[11])+((Ziffern%[2]+Ziffern%[4]+Ziffern%[6]+Ziffern%[8]+Ziffern%[10]+Ziffern%[12])*3)) MOD 10)
If Ziffern%[13] = 10
Ziffern%[13] = 0
EndIf
Imprimir "Ziffer 13: "+Str$(Ziffern%[13])
//Startbereich Einfügen
EAN$ = "101"
i% = 0
For i%,12
If i% <= 6
//Vor el Mitte
SELECT Ziffern%[i%+1]
CASEOF 0
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0001101"
Más
EAN$ = EAN$ + "0100111"
EndIf
CASEOF 1
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0011001"
Más
EAN$ = EAN$ + "0110011"
EndIf
CASEOF 2
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0010011"
Más
EAN$ = EAN$ + "0011011"
EndIf
CASEOF 3
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0111101"
Más
EAN$ = EAN$ + "0100001"
EndIf
CASEOF 4
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0100011"
Más
EAN$ = EAN$ + "0011101"
EndIf
CASEOF 5
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0110001"
Más
EAN$ = EAN$ + "0111001"
EndIf
CASEOF 6
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0101111"
Más
EAN$ = EAN$ + "0000101"
EndIf
CASEOF 7
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0111011"
Más
EAN$ = EAN$ + "0010001"
EndIf
CASEOF 8
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0110111"
Más
EAN$ = EAN$ + "0001001"
EndIf
CASEOF 9
If Substr$(ErstCode$[Ziffern%[1]],i%) = "U"
EAN$ = EAN$ + "0001011"
Más
EAN$ = EAN$ + "0010111"
EndIf
ENDSELECT
//Mittleren Zona einfügen
If i% = 6
EAN$ = EAN$ + "01010"
EndIf
Más
//Nach el Mitte
SELECT Ziffern%[i%+1]
CASEOF 0
EAN$ = EAN$ + "1110010"
CASEOF 1
EAN$ = EAN$ + "1100110"
CASEOF 2
EAN$ = EAN$ + "1101100"
CASEOF 3
EAN$ = EAN$ + "1000010"
CASEOF 4
EAN$ = EAN$ + "1011100"
CASEOF 5
EAN$ = EAN$ + "1001110"
CASEOF 6
EAN$ = EAN$ + "1010000"
CASEOF 7
EAN$ = EAN$ + "1000100"
CASEOF 8
EAN$ = EAN$ + "1001000"
CASEOF 9
EAN$ = EAN$ + "1110100"
ENDSELECT
EndIf
EndFor
//Endbereich einfügen
EAN$ = EAN$+"101"
Imprimir EAN$
Imprimir Str$(Len(EAN$))+" Blöcke"//Wenn hier no 95 como Ergebnis kommt es irgend algo torcido gelaufen
//Ein pocos Leerzeilen
Imprimir ""
Imprimir ""
Imprimir ""
Imprimir ""
Imprimir ""
Imprimir ""
Imprimir ""
Imprimir ""
Imprimir ""
//Dibujar
Imprimir " "+Str$(Ziffern%[1])+" "+Str$(Ziffern%[2])+Str$(Ziffern%[3])+Str$(Ziffern%[4])+Str$(Ziffern%[5])+Str$(Ziffern%[6])+Str$(Ziffern%[7])+" "+Str$(Ziffern%[8])+Str$(Ziffern%[9])+Str$(Ziffern%[10])+Str$(Ziffern%[11])+Str$(Ziffern%[12])+Str$(Ziffern%[13])
USEP 0,1,RGB(0,0,0)
i% = 0
For i%,95
If Substr$(EAN$,i%) = 1
SELECT i%
CASEOF 1,2,3,46,47,48,49,50,95,94,93
Line 30+2*i%-1,300 - 30+2*i%-1,370
Line 30+2*i%,300 - 30+2*i%,370
OTHERWISE
Line 30+2*i%-1,300 - 30+2*i%-1,350
Line 30+2*i%,300 - 30+2*i%,350
ENDSELECT
EndIf
EndFor
Waitinput
End
|
| 12 kB | | Bezeichnung: | Screenshot | | Versión: | 0.1 | | Kurzbeschreibung: | Screenshot des ausgeführten Codes EAN13 | | Hochgeladen: | 23.10.2021 | | Ladeanzahl: | | | | Descargar |
|
|
| XProfan X4; Win10 x64 Der Kuchen ist eine lüge! | 23.10.2021 ▲ |
|
|
|
|
p.specht
| Hab´s para XProfan-11.2a free retro-transponiert. Klappt nun auch compiliert ( Doppelpunkte en Kommentarzeilen interpretiert el alte Compiler como Zeilentrenner y wundert se entonces encima unbekannte Befehle). Achtung, weitestgehend ungetestet - por lo tanto sin jede Gewähr! Prüfbar mittels online-Generator de [...]
' 'EAN 13 Strichcode generieren' by Thomas Zielinski, Okt.2021 ' Retro-transponiert después de XProfan-11.2a free by p.specht en Nov.2021
' Grundsätzlicher EAN-13-Strichodeaufbau: ' Start="101" - 6 Ziffern Links - Mitte="01010" - 6 Ziffern Rechts - Ende="101"
' Links Mitte=01010 Rechts Parität ' Ungerade Gerade Rechts el 1. Ziffer ' *) **) ' 0- 0001101 0100111 1110010 UUUUUU ' 1- 0011001 0110011 1100110 UUGUGG ' 2- 0010011 0011011 1101100 UUGGUG ' 3- 0111101 0100001 1000010 UUGGGU ' 4- 0100011 0011101 1011100 UGUUGG ' 5- 0110001 0111001 1001110 UGGUUG ' 6- 0101111 0000101 1010000 UGGGUU ' 7- 0111011 0010001 1000100 UGUGUG ' 8- 0110111 0001001 1001000 UGUGGU ' 9- 0001011 0010111 1110100 UGGUGU ' ____ ' *) "Links ungerade" se hier invertiert y mittig gespiegelt ' **)"Links ungerade" se binär invertiert.
' Aufbau= Startcode - 6 Ziffern links - Mittencode - 6 Ziffern rechts - Endecode ' El Codierung el ersten Ziffer (el el Anwendungsbereich kennzeichnet) ergibt se para el Stringpositionen 2 a 7 de el obigen Tabla, ' Das steuert, si una gerade oder una ungerade Quersumme angewandt se. ' Im nachstehenden Ejemplo sei esta erste Ziffer = 2 ("Einzelhandel") ' 101 2. 3. 4. 5. 6. 7. 01010 8. 9. 10. 11. 12. 13. 101 <- Stringpositionsfestlegung für das Programm ' 101 U U G G U G 01010 R R R R R R 101 <- 2. bis 7. Ob U oder G siehe Parität oben
' El 1. Zahl (Stringposition 2) debería en diesem Anwendungsfall siempre en el WErt 2 lauten, ' todos otro Ziffern salvo 2 son por el EAN cierto Ländern zugeordnet y sólo después de offiieller Vergabe nutzbar. ' El 2 aber es para el Einzelhandel generell y kann entonces o más weniger cualquier genutzt voluntad. ' Lo verbleiben also sólo 11 Ziffern a freien Vergabe si uno no Nummer zugewiesen bekommen ha. ' Therotisch kann el 2. Ziffer en el 2él-Zona ebenfalls por el zuständige Vergabestelle vorgegeben ser. Das Ignoriere Yo hier aber. ' En Zuweisung bekommt uno de paso el ersten 5 o 7 Ziffern (Herstellerkennung) zugewiesen. Nur ' el restlichen 7 a 5 Positionen puede entonces frei gewählt voluntad.
' El 13. Zahl es una Prüfziffer y errechnet se de el folgender Formel ' PrüfZiffer = Modulo10((1.+3.+5.+7.+9.+11.)+((2.+4.+6.+8.+10.+12.)*3)); Caso negativo erg% == 0 Then erg% = 10-erg%
Título de la ventana "EAN-13 for XProfan-11 free, después de Orig. por Thomas Zielinski" Ventana de Estilo 24
Declarar Nummern$, Ziffern%[], i%, EAN$, ErstCode$[], ans$ ' Paritätstabelle ErstCode$[0] = "UUUUUU" ErstCode$[1] = "UUGUGG" ErstCode$[2] = "UUGGUG" ErstCode$[3] = "UUGGGU" ErstCode$[4] = "UGUUGG" ErstCode$[5] = "UGGUUG" ErstCode$[6] = "UGGGUU" ErstCode$[7] = "UGUGUG" ErstCode$[8] = "UGUGGU" ErstCode$[9] = "UGGUGU"
Bucle: CLS Imprimir "\nBitte geben Sie el 12 Ziffern una (El erste debería 2 ser para Einzelhandel):" Imprimir "............" Entrada Nummern$ ' Nummern$ = "269854713256" ' ACHTUNG! Hier no Prüfung en Plausibilität. Empfehle Yo aber dringend. if len(Nummern$)<>12 imprimir " *** Ziffernanzahl 12 stimmt no! ***" beep waitinput goto "Bucle" endif
Claro Ziffern%[] Whileloop 12:i%=&Loop Ziffern%[i%] = val(Mid$(Nummern$,i%,1)) Imprimir "Ziffer Nr." + Str$(i%)+": "+Str$(Ziffern%[i%]) EndWhile ' Prüfziffer berechnen Ziffern%[13] = 10-(((Ziffern%[1]+Ziffern%[3]+Ziffern%[5]+Ziffern%[7]+Ziffern%[9]+Ziffern%[11])+\ ((Ziffern%[2]+Ziffern%[4]+Ziffern%[6]+Ziffern%[8]+Ziffern%[10]+Ziffern%[12])*3)) MOD 10) Case Ziffern%[13] = 10:Ziffern%[13] = 0 Imprimir "Prüfziffer 13: "+Str$(Ziffern%[13])
' Startbereich Einfügen EAN$ = "101" Whileloop 12:i%=&Loop If i% <= 6 ' Vor der Mitte: SELECT Ziffern%[i%+1] CASEOF 0 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0001101" Else EAN$ = EAN$ + "0100111" EndIf CASEOF 1 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0011001" Else EAN$ = EAN$ + "0110011" EndIf CASEOF 2 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0010011" Else EAN$ = EAN$ + "0011011" EndIf CASEOF 3 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0111101" Else EAN$ = EAN$ + "0100001" EndIf CASEOF 4 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0100011" Else EAN$ = EAN$ + "0011101" EndIf CASEOF 5 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0110001" Else EAN$ = EAN$ + "0111001" EndIf CASEOF 6 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0101111" Else EAN$ = EAN$ + "0000101" EndIf CASEOF 7 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0111011" Else EAN$ = EAN$ + "0010001" EndIf CASEOF 8 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0110111" Else EAN$ = EAN$ + "0001001" EndIf CASEOF 9 If SubStr$(ErstCode$[Ziffern%[1]],i%) = "U" EAN$ = EAN$ + "0001011" Else EAN$ = EAN$ + "0010111" EndIf ENDSELECT ' Mittleren Bereich einfügen If i% = 6 EAN$ = EAN$ + "01010" EndIf Más ' Nach el Mitte SELECT Ziffern%[i%+1] CASEOF 0 EAN$ = EAN$ + "1110010" CASEOF 1 EAN$ = EAN$ + "1100110" CASEOF 2 EAN$ = EAN$ + "1101100" CASEOF 3 EAN$ = EAN$ + "1000010" CASEOF 4 EAN$ = EAN$ + "1011100" CASEOF 5 EAN$ = EAN$ + "1001110" CASEOF 6 EAN$ = EAN$ + "1010000" CASEOF 7 EAN$ = EAN$ + "1000100" CASEOF 8 EAN$ = EAN$ + "1001000" CASEOF 9 EAN$ = EAN$ + "1110100" ENDSELECT EndIf EndWhile ' Endbereich einfügen EAN$ = EAN$+"101" Imprimir EAN$ Imprimir Str$(Len(EAN$))+" Blöcke" if len(EAN$)<>95 imprimir " *** Wenn hier no 95 como Ergebnis kommt es offenbar irgend algo torcido gelaufen! ***" beep waitinput Endif ' Ein pocos Leerzeilen Imprimir "" Imprimir "" Imprimir "" Imprimir "" Imprimir "" Imprimir "" Imprimir "" ' Dibujar Imprimir " "+Str$(Ziffern%[1])+" "+Str$(Ziffern%[2])+Str$(Ziffern%[3])+Str$(Ziffern%[4])+Str$(Ziffern%[5])+Str$(Ziffern%[6])+Str$(Ziffern%[7])+" "+Str$(Ziffern%[8])+Str$(Ziffern%[9])+Str$(Ziffern%[10])+Str$(Ziffern%[11])+Str$(Ziffern%[12])+Str$(Ziffern%[13]) USEP 0,1,RGB(255,0,0) WHILELOOP 95:i%=&Loop If val(mid$(EAN$,i%,1)) = 1 SELECT i% CASEOF 1,2,3,46,47,48,49,50,95,94,93 Line 30+2*i%-1,300 - 30+2*i%-1,370 Line 30+2*i%,300 - 30+2*i%,370 OTHERWISE Line 30+2*i%-1,300 - 30+2*i%-1,350 Line 30+2*i%,300 - 30+2*i%,350 ENDSELECT EndIf EndWHILE imprimir imprimir beep imprimir "\nEinen más Code generieren? (j/n) "; input ans$ ans$=lower$(left$(ans$,1)) caso ans$="j":goto "Bucle" imprimir "Na entonces: Auf Wiedersehen!" beep waitinput 2500 FIN |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 05.11.2021 ▲ |
|
|
|
|
p.specht
| Der EAN-13 Code heißt en Österreich seit einiger Tiempo GS1-Code, como diesem PDF unserer Wirtschaftskammer a entnehmen es: [...] |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 06.11.2021 ▲ |
|
|
|
|
p.specht
| Ein EAN-13-Scanner-Algorithmus se zB HIER (pdf) beschrieben: [...]
Sin embargo, el Deepl-übersetzte Texto para 1.Ziffer = 8, el gehört natürlich adaptado:
Zit.: DEKODIERUNGSALGORITHMUS El Barcodenummer es con Ayuda des Arrays el Balken-Breiten dekodiert. El erste Ziffer es hier siempre 8, como es el erste Ziffer des Ländercodes es y es fest. Como de Tabla 1 hervorgeht, se el erste Gruppe de 6 Ziffern como LGLGGL codiert y el letzte Gruppe de 6 Ziffern como RRRRR verschlüsselt. Jede Ziffer se por 4 Balken dargestellt, wobei el schwarzen y weißen Balken abwechseln. Für el ersten 6 Ziffern es el erste Balken siempre una weißer Balken y nächste schwarz y así más. En el letzten 6 Ziffern es genau umgekehrt. Ein Balken kann vier Breiten de 1 a 4 haben. Aus el Reihe el Balken-Breiten son el ersten y letzten drei Breiten siempre eins, qué el Anfang y el Ende des Strichcodes angibt.
El verbleibenden Breiten son en jeweils 4 gruppiert, como una cierto Ziffer por 4 Balken dargestellt se. In Tabla 2 es 0 para weiß, y 1 es para schwarz. Wenn para Ejemplo una Gruppe de 4 Breiten (el una Zahl de el ersten 6 Ziffern darstellen) el Zahl 3112 es, se ellos como 0001011 betrachtet (3 Es el Breite uno weißen Balken y se por lo tanto por drei Nullen dargestellt). Hier es also 3 el Breite uno weißen Balkens, 1 el Breite uno schwarzen Balkens y así más. Aus el Tabla1 es esta erste Gruppe de 4 Breiten, el bajo el L-Code kodiert es, en Tabla 2 bajo el L-Code gesucht, y se con el Code el Ziffer 9 übereinstimmen. Folglich se el erste Ziffer como 9 dekodiert. Auch el otro Ziffern voluntad con Ayuda el Tabla dekodiert. Zit. Ende, Details sh. Literaturhinweise en el pdf, |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 14.11.2021 ▲ |
|
|
|