Was ist die Formel für das 3 von 9 Barcode-Alphabet?

8

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/

Chris Moschini
quelle
Ich habe das Wiki nicht gelesen, aber nachdem ich Ihr Beispiel gesehen habe, würde ich sagen, dass das nächste G 111-01
Pieter B
Leider ist es G 000-11.
Chris Moschini

Antworten:

8

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.

Dummkopf
quelle
9

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.

  • Angenommen, wenn Sie zwei Zeichen auf diese Weise "codieren" möchten, benötigen Sie mindestens zwei Bits. 00und 11machen 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 von 01und auch 10sicher 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 sequenceusw.

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 Nkönnte ungefähr wie folgt sein:

  1. Ordnen Sie ein boolesches Array mit einer Länge zu 2 power Nund initialisieren Sie seine Elemente mittrue
  2. Beginnen Sie mit 0- seine boolesche Darstellung ist NBits, jede Null
  3. do Ntimes: 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.
  4. Weiter , nachdem findet 0Index in dem Array - Element ist true,
    für die Bit - Darstellung dieses Index Wiederholen derselben Schleife wie oben:
    invert eines des Bits und jeweilige Markierung ( „unsicher“) Elements des Arraysfalse
  5. Finde den nächsten trueIndex und so weiter und so fort, bis das Array endet

Am Ende truereprä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ß .

Mücke
quelle
3

Die Wikipedia-Seite, auf die Sie verlinken, erwähnt dies

Ihr ursprüngliches Design umfasste zwei breite Balken und einen großen Raum in jedem Zeichen, was zu 40 möglichen Zeichen führte.

Als Referenz zitiert es David Allais 'Memoiren:

Ich illustrierte ein Symbolzeichen mit der Seite der Kreide, um die breiten Balken zu zeichnen. Die Struktur von fünf Balken und vier Feldern, darunter zwei breite Balken und ein breites Feld, kam mir blitzschnell. Die zwei von fünf Codierungen in den Balken ergaben zehn Kombinationen und der große Raum für vier separate Gruppen.

In diesem Sinne können wir die markierten Balken und Leerzeichen identifizieren und es entsteht ein Muster:

  BSBSBSBSB     BB S
  001122334

0 000110100     23 1
1 100100001     04 1
2 001100001     14 1
3 101100000     01 1
4 000110001     24 1
5 100110000     02 1
6 001110000     12 1
7 000100101     34 1
8 100100100     03 1
9 001100100     13 1

A 100001001     04 2
B 001001001     14 2
C 101001000     01 2
D 000011001     24 2
E 100011000     02 2
F 001011000     12 2
G 000001101     34 2
H 100001100     03 2
I 001001100     13 2
J 000011100     23 2

K 100000011     04 3
L 001000011     14 3
M 101000010     01 3
N 000010011     24 3
O 100010010     02 3
P 001010010     12 3
Q 000000111     34 3
R 100000110     03 3
S 001000110     13 3
T 000010110     23 3

U 110000001     04 0
V 011000001     14 0
W 111000000     01 0
X 010010001     24 0
Y 110010000     02 0
Z 011010000     12 0
- 010000101     34 0
. 110000100     03 0
  011000100     13 0
* 010010100     23 0

Beachten Sie, dass die Balken 0im ersten Abschnitt stattdessen 10den anderen drei Abschnitten entsprechen. Wenn wir die zu bestellenden Balken drehen 40123, sehen wir das Muster

    40123
04  xx...
14  x.x..
01  .xx..
24  x..x.
02  .x.x.
12  ..xx.
34  x...x
03  .x..x
13  ..x.x
23  ...xx

Dies 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-B0von in der Darstellung links nach rechts und stattdessen jeden Code als repräsentieren SBBIndizes dann die Sequenz 12..90AB..YZ-. *wird 010 020 021 030 031 032 040 041 042 043 110 120 ... 342 343.

Peter Taylor
quelle