| |
|
|
Thomas Zielinski | Salut, qui EAN13 Barcode ist pas simple seulement une Folge de umgewandelten payons dans Striche mais unterliegt einigen régulariser. Bien sûr darf il aussi pas simple munter sur elle à l'attaque genutzt volonté mais unterliegt qui Vergabe entsprechender Länderstellen. EAN 13 Codes qui avec einer 2 Anfangen sommes allerdings pour une flexibleren Einsatz comment à qui Wursttheke ou bien dans qui Gemüseabteilung reserviert.
un EAN13 Code besteht aus 13 Les chiffres. qui ersten 2 jusqu'à 3 Les chiffres donner cela pays qui Ausgabe à, gefolgt de einer 5- ou bien 7-Stelligen Betriebsnummer, qui réel Artikelnummer et à 13. Stelle une Prüfzahl.
Pour chaque se mettre 0-9 gibt es jeweils 3 mögliche Anordnungen qui poutre dépendant de Ihrer Position im Barcode et qui ersten Ziffer. la première Ziffer wird pas direct traduit, mais ergibt sich aus qui Anordnung qui Les chiffres 2 jusqu'à 7. qui Les chiffres 8 jusqu'à 13 volonté mais toujours pour dem selben Schema erstellt.
qui beigefügte Quellcode ist peut-être pas sonderlich elegant gelöst, mais funktioniert pour mon projet.
//EAN 13 Code
//Thomas Zielinski - octobre 2021
// à gauche à droite parité
// Ungerade justement à droite 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 Les chiffres à gauche - Mitte - 6 Les chiffres à droite - Ende
//la première Ziffer ergibt sich aus qui Verteilung qui Les chiffres 2 jusqu'à 7 gemäß qui Tabelle si une justement ou bien une ungerade Quersumme angewandt wird.
//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. jusqu'à 7. si U ou bien G siehe parité (Im Beispiel ici qui 2)
//qui 1. numéro sollte toujours un 2 son. Alle anderen Les chiffres sommes par qui EAN Ländern zugeordnet et seulement pour Vergabe nutzbar. qui 2 mais ist pour den Einzellhandel et peux beliebig genutzt volonté.
// qui 13. numéro ist une Prüfziffer et errechnet sich aus Modulo10((1.+3.+5.+7.+9.+11.)+((2.+4.+6.+8.+10.+12.)*3)); Si non erg% == 0 Then erg% = 10-erg%
// Es verbleiben alors seulement 11 Les chiffres zum vergeben si on aucun numéro zugewiesen bekommen hat. Therotisch peux qui 2. Ziffer im 2il-Bereich également par qui Zuständige Vergabestelle vorgegeben son. cela Ignoriere je ici mais.
// chez qui Zuweisung bekommt on incidemment seulement qui ersten 5 bzw 7 Les chiffres zugewiesen. qui Restlichen Les chiffres peut libre gewählt volonté, wobei qui 13. qui Prüfziffer ist.
Déclarer Nummern$, Les chiffres%[], 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"
Imprimer "Geben vous 12 Les chiffres un:"
Imprimer "Die erste numéro sollte une 2 son pour den Einzelhandel."
Contribution Nummern$
//Nummern$ = "269854713256"
//ACHTUNG! ici aucun Prüfung sur plausibilität. Empfehle je mais dringend.
i% = 0
For i%,12
Ziffern%[i%] = $ Substr(Nummern$,i%)
Imprimer "Ziffer " + Str$(i%)+": "+Str$(Les chiffres%[i%])
EndFor
//Prüfziffer berechnen
Ziffern%[13] = 10-(((Les chiffres%[1]+Les chiffres%[3]+Les chiffres%[5]+Les chiffres%[7]+Les chiffres%[9]+Les chiffres%[11])+((Les chiffres%[2]+Les chiffres%[4]+Les chiffres%[6]+Les chiffres%[8]+Les chiffres%[10]+Les chiffres%[12])*3)) MOD 10)
Si Les chiffres%[13] = 10
Les chiffres%[13] = 0
EndIf
Imprimer "Ziffer 13: "+Str$(Les chiffres%[13])
//Startbereich insérer
EAN$ = "101"
i% = 0
For i%,12
Si i% <= 6
//avant qui Mitte
SELECT Les chiffres%[i%+1]
CASEOF 0
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0001101"
D'autre
EAN$ = EAN$ + "0100111"
EndIf
CASEOF 1
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0011001"
D'autre
EAN$ = EAN$ + "0110011"
EndIf
CASEOF 2
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0010011"
D'autre
EAN$ = EAN$ + "0011011"
EndIf
CASEOF 3
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0111101"
D'autre
EAN$ = EAN$ + "0100001"
EndIf
CASEOF 4
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0100011"
D'autre
EAN$ = EAN$ + "0011101"
EndIf
CASEOF 5
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0110001"
D'autre
EAN$ = EAN$ + "0111001"
EndIf
CASEOF 6
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0101111"
D'autre
EAN$ = EAN$ + "0000101"
EndIf
CASEOF 7
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0111011"
D'autre
EAN$ = EAN$ + "0010001"
EndIf
CASEOF 8
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0110111"
D'autre
EAN$ = EAN$ + "0001001"
EndIf
CASEOF 9
Si $ Substr(ErstCode$[Les chiffres%[1]],i%) = "U"
EAN$ = EAN$ + "0001011"
D'autre
EAN$ = EAN$ + "0010111"
EndIf
ENDSELECT
//Mittleren Bereich insérer
Si i% = 6
EAN$ = EAN$ + "01010"
EndIf
D'autre
//Pour qui Mitte
SELECT Les chiffres%[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 insérer
EAN$ = EAN$+"101"
Imprimer EAN$
Imprimer Str$(Len(EAN$))+" Blöcke"//si ici pas 95 comme Ergebnis venez ist irgend quelque chose de travers gelaufen
//un paire Leerzeilen
Imprimer »
Imprimer »
Imprimer »
Imprimer »
Imprimer »
Imprimer »
Imprimer »
Imprimer »
Imprimer »
//Zeichnen
Imprimer " "+Str$(Les chiffres%[1])+" "+Str$(Les chiffres%[2])+Str$(Les chiffres%[3])+Str$(Les chiffres%[4])+Str$(Les chiffres%[5])+Str$(Les chiffres%[6])+Str$(Les chiffres%[7])+" "+Str$(Les chiffres%[8])+Str$(Les chiffres%[9])+Str$(Les chiffres%[10])+Str$(Les chiffres%[11])+Str$(Les chiffres%[12])+Str$(Les chiffres%[13])
USEP 0,1,RGB(0,0,0)
i% = 0
For i%,95
Si $ 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
Fin
|
| 12 kB | | Bezeichnung: | Screenshot | | Version: | 0.1 | | Kurzbeschreibung: | Screenshot des ausgeführten Codes EAN13 | | Hochgeladen: | 23.10.2021 | | Downloadcounter: | | | | Download |
|
|
| XProfan X4; Win10 x64 Der Kuchen ist eine lüge! | 23.10.2021 ▲ |
|
|
|
|
p.specht
| Hab´s pour XProfan-11.2a free retro-transponiert. Klappt eh bien aussi compilé ( Doppelpunkte dans Kommentarzeilen interpretiert le vieux Compiler comme Zeilentrenner et wundert sich ensuite sur unbekannte Befehle). attention, weitestgehend ungetestet - daher sans chacun Gewähr! Prüfbar mittels online-Generator de [...]
' 'EAN 13 Strichcode generieren' by Thomas Zielinski, Okt.2021 ' Retro-transponiert pour XProfan-11.2a free by p.specht dans Nov.2021
' Grundsätzlicher EAN-13-Strichodeaufbau: ' Start="101" - 6 Les chiffres à gauche - Mitte="01010" - 6 Les chiffres à droite - Ende="101"
' à gauche Mitte=01010 à droite parité ' Ungerade justement à droite qui 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 ' ____ ' *) "à gauche ungerade" wird ici invertiert et mittig gespiegelt ' **)"à gauche ungerade" wird binär invertiert.
' Aufbau= Startcode - 6 Les chiffres à gauche - Mittencode - 6 Les chiffres à droite - Endecode ' qui Codierung qui ersten Ziffer (qui den Anwendungsbereich kennzeichnet) ergibt sich pour qui Stringpositionen 2 jusqu'à 7 aus qui obigen Tabelle, ' cela steuert, si une justement ou bien une ungerade Quersumme angewandt wird. ' Im nachstehenden Beispiel sei cet 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
' qui 1. numéro (Stringposition 2) sollte dans diesem Anwendungsfall toujours sur den WErt 2 lauten, ' alle anderen Les chiffres ausser 2 sommes par qui EAN certain Ländern zugeordnet et seulement pour offiieller Vergabe nutzbar. ' qui 2 mais ist pour den Einzelhandel generell et peux ensuite plus ou bien moins beliebig genutzt volonté. ' Es verbleiben alors seulement 11 Les chiffres zur freien Vergabe si on aucun numéro zugewiesen bekommen hat. ' Therotisch peux qui 2. Ziffer im 2il-Bereich également par qui zuständige Vergabestelle vorgegeben son. cela Ignoriere je ici mais. ' chez qui Zuweisung bekommt on incidemment qui ersten 5 bzw 7 Les chiffres (Herstellerkennung) zugewiesen. seulement ' qui restlichen 7 jusqu'à 5 Positionen peut ensuite libre gewählt volonté.
' qui 13. numéro ist une Prüfziffer et errechnet sich aus qui suivant Formel ' PrüfZiffer = Modulo10((1.+3.+5.+7.+9.+11.)+((2.+4.+6.+8.+10.+12.)*3)); Si non erg% == 0 Then erg% = 10-erg%
Titre de la fenêtre "EAN-13 for XProfan-11 free, pour Orig. de Thomas Zielinski" Fenêtre Style 24
Déclarer Nummern$, Les chiffres%[], i%, EAN$, ErstCode$[], à l'$ ' 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"
Boucle: CLS Imprimer "\nBitte donner vous qui 12 Les chiffres un (la première sollte 2 son pour Einzelhandel):" Imprimer "............" Contribution Nummern$ ' Nummern$ = "269854713256" ' ACHTUNG! ici aucun Prüfung sur Plausibilität. Empfehle je mais dringend. si len(Nummern$)<>12 imprimer " *** Ziffernanzahl 12 stimmt pas! ***" beep waitinput goto "Boucle" endif
Claire Les chiffres%[] Whileloop 12:i%=&Loop Les chiffres%[i%] = val(Milieu$(Nummern$,i%,1)) Imprimer "Ziffer Nr." + Str$(i%)+": "+Str$(Les chiffres%[i%]) Endwhile ' Prüfziffer berechnen Les chiffres%[13] = 10-(((Les chiffres%[1]+Les chiffres%[3]+Les chiffres%[5]+Les chiffres%[7]+Les chiffres%[9]+Les chiffres%[11])+\ ((Les chiffres%[2]+Les chiffres%[4]+Les chiffres%[6]+Les chiffres%[8]+Les chiffres%[10]+Les chiffres%[12])*3)) MOD 10) Cas Les chiffres%[13] = 10:Les chiffres%[13] = 0 Imprimer "Prüfziffer 13: "+Str$(Les chiffres%[13])
' Startbereich insérer EAN$ = "101" Whileloop 12:i%=&Loop Si 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 Si i% = 6 EAN$ = EAN$ + "01010" EndIf D'autre ' Pour qui Mitte SELECT Les chiffres%[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 insérer EAN$ = EAN$+"101" Imprimer EAN$ Imprimer Str$(Len(EAN$))+" Blöcke" si len(EAN$)<>95 imprimer " *** si ici pas 95 comme Ergebnis venez ist évident irgend quelque chose de travers gelaufen! ***" beep waitinput Endif ' un paire Leerzeilen Imprimer "" Imprimer "" Imprimer "" Imprimer "" Imprimer "" Imprimer "" Imprimer "" ' Zeichnen Imprimer " "+Str$(Les chiffres%[1])+" "+Str$(Les chiffres%[2])+Str$(Les chiffres%[3])+Str$(Les chiffres%[4])+Str$(Les chiffres%[5])+Str$(Les chiffres%[6])+Str$(Les chiffres%[7])+" "+Str$(Les chiffres%[8])+Str$(Les chiffres%[9])+Str$(Les chiffres%[10])+Str$(Les chiffres%[11])+Str$(Les chiffres%[12])+Str$(Les chiffres%[13]) USEP 0,1,RGB(255,0,0) WHILELOOP 95:i%=&Loop Si 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 imprimer imprimer beep imprimer "\nEinen weiteren Code generieren? (j/n) "; input à l'$ à l'$=lower$(left$(à l'$,1)) cas à l'$="j":goto "Boucle" imprimer "Na ensuite: sur 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
| qui EAN-13 Code est dans Österreich depuis einiger Zeit GS1-Code, comment diesem PDF unserer Wirtschaftskammer trop entnehmen ist: [...] |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 06.11.2021 ▲ |
|
|
|
|
p.specht
| un EAN-13-Scanner-Algorithmus wird zB ICI (pdf) beschrieben: [...]
Allerdings ist qui Deepl-übersetzte Text pour 1.Ziffer = 8, cela est naturellement angepasst:
Zit.: DEKODIERUNGSALGORITHMUS qui Barcodenummer wird avec Aider des Arrays qui poutre-Breiten dekodiert. la première Ziffer ist ici toujours 8, là es sich à erste Ziffer des Ländercodes handelt et ist fest. comment aus Tabelle 1 hervorgeht, wird la première Gruppe de 6 Les chiffres comme LGLGGL codiert et qui dernier Gruppe de 6 Les chiffres comme RRRRR verschlüsselt. chacun Ziffer wird par 4 poutre dargestellt, wobei sich qui schwarzen et weißen poutre abwechseln. Pour qui ersten 6 Les chiffres ist qui erste poutre toujours un weißer poutre et qui prochain noir et so plus. chez den letzten 6 Les chiffres ist es oui c'est ca renversé. un poutre peux quatre Breiten de 1 jusqu'à 4 avons. Aus qui Reihe qui poutre-Breiten sommes qui ersten et letzten trois Breiten toujours une, quoi den Anfang et cela Ende des Strichcodes angibt.
qui verbleibenden Breiten sommes dans jeweils 4 gruppiert, là une bestimmte Ziffer par 4 poutre dargestellt wird. dans Tabelle 2 steht 0 pour sais, et 1 steht pour noir. si zum Beispiel une Gruppe de 4 Breiten (qui une numéro aus den ersten 6 Les chiffres représenter) qui numéro 3112 ist, wird vous comme 0001011 betrachtet (3 ist qui Breite eines weißen poutre et wird daher par trois Nullen dargestellt). ici ist alors 3 qui Breite eines weißen Balkens, 1 qui Breite eines schwarzen Balkens et so plus. Aus qui Tabelle1 ist cet erste Gruppe de 4 Breiten, qui sous dem L-Code kodiert ist, dans Tabelle 2 sous dem L-Code gesucht, et wird avec dem Code qui Ziffer 9 übereinstimmen. Folglich wird la première Ziffer comme 9 dekodiert. aussi qui anderen Les chiffres volonté avec Aider qui Tabelle dekodiert. Zit. Ende, Details sh. Literaturhinweise im pdf, |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 14.11.2021 ▲ |
|
|
|