3 of 9バーコードアルファベットの計算式は何ですか?


8

背景: 3の9バーコードアルファベット

3/9バーコードの簡単な構文

3 of 9バーコードのアルファベットと数字の背後にある公式は何ですか?

たとえば、ASCIIの配置は比較的明確です。数字は33から始まり、大文字は65、小文字は97です。これらの開始点から、任意の数字または文字のASCIIコードを推測できます。各範囲の開始点も32 + 1の倍数です。

バーコードはランダムでシーケンスに欠けているようです。2番目のリンクの構文を使用する場合、これは3 of 9の最初の6文字です。

A 100-01
B 010-01
C 110-00
D 001-01
E 101-00
F 011-00

ここにはパターンはありません。それは何ですか?私はこれらの背後にあるデザイナーの意図したパターンに関心があります。それは、シーケンスに基づいて特定のキャラクターに対して上記のコードを提供できる独自のアルゴリズムを考案している誰かと同じくらいです。

私はこの質問をどこに置くか苦労しました。それは歴史、コンピューターサイエンス、情報科学ですか?StackExchange検索ではここで最も多くのバーコードヒットがあり、探している数式や説明の種類を説明するためにそれをASCIIに具体的に関連付けたかったため、プログラマを選択しました。


更新

好奇心旺盛な方のために、Code 39のすべての基本的な文字の完全なリストを以下に示します。http//jsfiddle.net/b9chris/LnX2e/2/

(ソース行は私のC#バーコードlibから取得されます)

提案されている簡略化された構文は、すべての文字がダッシュ位置のある5ビットの数値であることを暗示している可能性があるため、問題を少し混乱させる可能性があります。最後の4文字には多数のダッシュ(広いギャップ)があります。実際、これらのコードは、ほとんどのシンボルで奇数ビットのほとんどが0に設定されている9ビットの数値と考えるのが最善です。ここでは、それらは9ビットの数値です:http : //jsfiddle.net/b9chris/LnX2e/1/


私はwikiを読みませんでしたが、あなたの例を見た後、次はG 111-01
Pieter B

悲しいことに、G 000-11です。
Chris Moschini、2013

回答:


8

これが正しい説明かどうかはわかりませんが、投稿した内容に基づいています。最初の3ビットは、逆バイナリでは1〜6です。最初の3(4?)ビットに1が奇数の場合、最後の桁は1であるため、これはおそらくパリティビットです。


9

このエンコーディングがどのように機能するかを考える正しいパターンは、1)「安全なビットシーケンス」のセットを見つけ、2)文字をこれらのシーケンスにマップすることです。

最終結果はランダムな順序のように感じられますが、これらの各ステップはそれ自体が非常に論理的です。

「安全な」ビットシーケンスとは、そのいずれかで1つのビットを反転すると、結果がセットの「外側」になるというものです。これはエラーチェックの一種です。基本的には、Code 39の主要な「セールスポイント」です。

  • たとえば、その方法で2文字を「エンコード」する場合は、少なくとも2ビットが必要になります。00そして11これらのいずれかでブレーク(反転)1ビット、あなたは無効なコードを取得します- 2つの安全なビットシーケンスのセットを作ります。セットを注意01して10も安全です。
     
    3つの文字をエンコードするには、2つ以上のビットが必要です。
    3文字のセーフセットの例は、000、110、011です。

ここで、39文字をエンコードする必要があります。

まず、そのために必要なビット数を見つけ、次に「安全なビットシーケンス」のセットを見つけます。

そしてその後のみfirst char -> first safe bit sequencesecond char -> second sequenceなどのキャラクターをマッピングします。

ご存知のように、ここでは「式」ではなく「ステップ」という観点から考える方が簡単です。


与えられたビット数の安全なビットシーケンスを見つけるアルゴリズムNは、次のようになります。

  1. 長さのブール配列を割り当て2 power N、その要素をtrue
  2. で始まる0-そのブール表現はNビットであり、各ゼロ
  3. do N回:0のビットの1つを反転します-「安全でないビットシーケンス」となり、
    結果のインデックスで配列要素をマークしますfalse
    array [1000]、array [0100]、array [0010]など
  4. 次の後に見つける0要素である配列のインデックスtrue
    :そのインデックスのビット表現のために、上記と同様のループを繰り返し
    ビットのうちの1つ反転し(「安全でない」)配列の要素をそれぞれのマークfalse
  5. true配列が終了するまで次のインデックスなどを見つける

最後に、マークtrueされた配列の要素は「安全なビットシーケンス」を表します。

これらのシーケンスをバーコードに変換するには、00-狭い黒、01-狭い白、10-広い黒、11-広い白のように、ビットのペアを適切にマッピングします。


3

あなたがリンクしているウィキペディアのページには、

オリジナルのデザインでは、各文字に2つのワイドバーと1つのワイドスペースが含まれており、40文字の文字が可能です。

参考として、David Allaisの回顧録を引用します。

チョークの側面を使用して幅の広いバーを描画し、シンボルキャラクターを説明しました。5本のバーと2本のワイドバーと1本のワイドスペースを含む4つのスペースの構造が思い浮かびました。バーの5つのコーディングのうち2つは10の組み合わせを提供し、4つの別々のグループに広いスペースを提供しました。

そのことを念頭に置いて、マークされたバーとスペースを識別でき、パターンが現れます:

  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

0最初のセクションののバー10は、他の3つのセクションに対応していることに注意してください。注文するバーを回転させると、表示される40123パターンは

    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

これは、5つの要素のペアを列挙する明らかな方法の1つです。

同様に、B1-S3-B2-S0-B3-S1-B4-S2-B0表現の左から右にビットに名前を付け、代わりに各コードをSBBインデックスとして表すと、シーケンスはに12..90AB..YZ-. *なり010 020 021 030 031 032 040 041 042 043 110 120 ... 342 343ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.