Hintergrund: 3 von 9 Barcode-Alphabet
Eine einfache Syntax für 3 von 9 Barcodes
Was ist die Formel hinter dem Alphabet und den Ziffern in einem 3 von 9 Barcode?
Zum Beispiel hat ASCII eine relativ klare Anordnung. Zahlen beginnen bei 33, Großbuchstaben bei 65, Kleinbuchstaben bei 97. Von diesen Startpunkten aus können Sie den ASCII-Code für jede Zahl oder jeden Buchstaben ableiten. Der Startpunkt für jeden Bereich ist ebenfalls ein Vielfaches von 32 + 1.
Barcodes scheinen zufällig und ohne Reihenfolge zu sein. Wenn wir die Syntax aus dem zweiten Link verwenden, sind dies die ersten sechs Zeichen in 3 von 9:
A 100-01
B 010-01
C 110-00
D 001-01
E 101-00
F 011-00
Ich sehe hier kein Muster; Was ist es? Ich bin genauso an dem beabsichtigten Muster des Designers interessiert wie an jemandem, der einen eigenen Algorithmus entwickelt, der Ihnen den obigen Code für ein bestimmtes Zeichen basierend auf seiner Reihenfolge geben kann.
Ich kämpfte mit der Frage, wo ich diese Frage stellen sollte. ist es Geschichte, Informatik, Informationswissenschaft? Ich habe mich für Programmierer entschieden, weil eine StackExchange-Suche hier die meisten Barcode-Treffer hatte und weil ich sie speziell mit ASCII verknüpfen wollte, um zu erklären, nach welcher Art von Formel / Erklärung ich suche.
Aktualisieren
Für Neugierige finden Sie hier die vollständige Liste aller Grundzeichen in Code 39: http://jsfiddle.net/b9chris/LnX2e/2/
(Die Quellzeilen stammen aus meiner C # -Barcode-Bibliothek. )
Sie werden feststellen, dass die vorgeschlagene vereinfachte Syntax das Problem etwas verwirren kann, da dies bedeuten kann, dass jedes Zeichen eine 5-Bit-Zahl mit einer Strichposition ist. Die letzten 4 Zeichen haben zahlreiche Striche (große Lücken). In der Tat werden diese Codes am besten als 9-Bit-Zahlen betrachtet, bei denen die meisten ungeraden Bits für die Mehrzahl der Symbole auf 0 gesetzt sind. Hier sind sie als 9-Bit-Zahlen: http://jsfiddle.net/b9chris/LnX2e/1/
quelle
Antworten:
Ich weiß nicht, ob dies die richtige Erklärung ist, aber basierend auf dem, was Sie gepostet haben: Die ersten 3 Bits sind 1 bis 6 in umgekehrter Binärzahl. Die letzte Ziffer ist 1, wenn die ersten 3 (4?) Bits eine ungerade Anzahl von 1s enthalten. Dies ist also wahrscheinlich ein Paritätsbit.
quelle
Das richtige Muster, um zu überlegen, wie diese Codierung funktioniert, ist, dass 1) Sie eine Reihe von "sicheren Bitsequenzen" finden und 2) Ihre Zeichen diesen Sequenzen zuordnen.
Das Endergebnis fühlt sich wie eine zufällige Reihenfolge an, aber jeder dieser Schritte ist per se ziemlich logisch.
"Sichere" Bitsequenzen sind so, dass, wenn Sie ein einzelnes Bit in einem davon invertieren, das Ergebnis "außerhalb" Ihres Satzes liegt. Dies ist eine Form der Fehlerprüfung - im Grunde ein wichtiges "Verkaufsargument" von Code 39.
00
und11
machen Sie einen Satz von zwei sicheren Bitsequenzen - brechen (invertieren) Sie ein Bit in einer dieser Sequenzen und Sie erhalten ungültigen Code. Beachten Sie, dass der Satz von01
und auch10
sicher ist.Um drei Zeichen zu codieren, benötigt man mehr als zwei Bits.
Ein Beispiel für einen sicheren Satz für drei Zeichen ist 000, 110 und 011.
Jetzt müssen Sie 39 Zeichen codieren.
Finden Sie zuerst heraus, wie viele Bits Sie dafür benötigen, und finden Sie dann eine Reihe von "sicheren Bitsequenzen".
Und erst danach, Karte Ihre Charaktere, wie
first char -> first safe bit sequence
,second char -> second sequence
usw.Sie sehen, es ist einfacher, hier in "Schritten" zu denken, nicht in "Formel".
Der Algorithmus zum Finden sicherer Bitsequenzen für eine gegebene Anzahl von Bits
N
könnte ungefähr wie folgt sein:2 power N
und initialisieren Sie seine Elemente mittrue
0
- seine boolesche Darstellung istN
Bits, jede NullN
times: Invertiere eines der Bits in 0 - das ist "unsichere Bitfolge",markiere das Array-Element am resultierenden Index-
false
Array [1000], Array [0100], Array [0010] usw.
0
Index in dem Array - Element isttrue
,für die Bit - Darstellung dieses Index Wiederholen derselben Schleife wie oben:
invert eines des Bits und jeweilige Markierung ( „unsicher“) Elements des Arrays
false
true
Index und so weiter und so fort, bis das Array endetAm Ende
true
repräsentieren markierte Elemente des Arrays "sichere Bitsequenzen".Um diese Sequenzen in Barcode umzuwandeln, würde man nur Bitpaare entsprechend zuordnen, wie 00 - schmales Schwarz, 01 - schmales Weiß, 10 - breites Schwarz, 11 - breites Weiß .
quelle
Die Wikipedia-Seite, auf die Sie verlinken, erwähnt dies
Als Referenz zitiert es David Allais 'Memoiren:
In diesem Sinne können wir die markierten Balken und Leerzeichen identifizieren und es entsteht ein Muster:
Beachten Sie, dass die Balken
0
im ersten Abschnitt stattdessen10
den anderen drei Abschnitten entsprechen. Wenn wir die zu bestellenden Balken drehen40123
, sehen wir das MusterDies ist eine der offensichtlichen Möglichkeiten, Paare von 5 Elementen aufzuzählen.
Gleichwertig, wenn Sie die Bits Namen
B1-S3-B2-S0-B3-S1-B4-S2-B0
von in der Darstellung links nach rechts und stattdessen jeden Code als repräsentierenSBB
Indizes dann die Sequenz12..90AB..YZ-. *
wird010 020 021 030 031 032 040 041 042 043 110 120 ... 342 343
.quelle