Công thức cho 3 trong 9 Bảng chữ cái mã vạch là gì?


8

Bối cảnh: 3 trên 9 Bảng chữ cái mã vạch

Một cú pháp đơn giản cho 3 trong số 9 mã vạch

Công thức đằng sau bảng chữ cái và chữ số trong mã vạch 3 trên 9 là gì?

Ví dụ, ASCII có sự sắp xếp tương đối rõ ràng. Các số bắt đầu từ 33, viết hoa ở 65, chữ thường ở 97. Từ những điểm bắt đầu này, bạn có thể suy ra mã ASCII cho bất kỳ số hoặc chữ cái nào. Điểm bắt đầu cho mỗi phạm vi cũng là bội số của 32 + 1.

Mã vạch có vẻ ngẫu nhiên và thiếu trình tự. Nếu chúng tôi sử dụng cú pháp từ liên kết thứ hai, đây là sáu ký tự đầu tiên trong 3 trên 9:

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

Tôi thấy không có mô hình ở đây; nó là gì? Tôi rất quan tâm đến mô hình dự định của nhà thiết kế đằng sau những điều này vì tôi đang nghĩ ra một thuật toán của riêng họ có thể cung cấp cho bạn mã trên cho một ký tự nhất định dựa trên chuỗi của nó.

Tôi đấu tranh với nơi để đặt câu hỏi này; Là lịch sử, khoa học máy tính, khoa học thông tin? Tôi đã chọn Lập trình viên vì một tìm kiếm StackExchange có nhiều lần truy cập mã vạch nhất ở đây và vì tôi muốn liên hệ cụ thể với ASCII để giải thích loại công thức / giải thích nào tôi đang tìm kiếm.


Cập nhật

Đối với người tò mò, đây là danh sách đầy đủ của tất cả các ký tự cơ bản trong Mã 39: http://jsfiddle.net/b9chris/LnX2e/2/

(các dòng nguồn được lấy từ lib mã vạch C # của tôi )

Bạn sẽ nhận thấy rằng cú pháp đơn giản được đề xuất có thể gây nhầm lẫn vấn đề một chút, bởi vì nó có thể ám chỉ rằng mỗi ký tự là một số 5 bit với vị trí dấu gạch ngang. 4 ký tự cuối cùng có nhiều dấu gạch ngang (khoảng trống rộng). Thực sự, các mã này được coi là tốt nhất là các số 9 bit có hầu hết các bit lẻ được đặt thành 0 cho phần lớn các ký hiệu. Ở đây chúng là các số 9 bit: http://jsfiddle.net/b9chris/LnX2e/1/


Tôi đã không đọc wiki nhưng sau khi xem ví dụ của bạn, tôi sẽ nói tiếp theo sẽ là G 111-01
Pieter B

Đáng buồn thay, đó là G 000-11.
Chris Moschini

Câu trả lời:


8

Tôi không biết đây có phải là lời giải thích chính xác hay không, nhưng dựa trên những gì bạn đã đăng: 3 bit đầu tiên là 1 đến 6 ở dạng nhị phân ngược. Chữ số cuối cùng là 1 khi có số lẻ 1s trong 3 (4?) Đầu tiên, vì vậy đây có lẽ là một bit chẵn lẻ.


9

Mẫu phù hợp để suy nghĩ cách mã hóa này hoạt động là 1) bạn tìm thấy một tập hợp "chuỗi bit an toàn", sau đó 2) ánh xạ các ký tự của bạn tới các chuỗi này.

Kết quả cuối cùng có cảm giác như một thứ tự ngẫu nhiên, nhưng mỗi bước này khá logic mỗi lần.

Chuỗi bit "An toàn" là như vậy nếu bạn đảo ngược một bit trong bất kỳ chuỗi nào, kết quả sẽ là "bên ngoài" của tập hợp của bạn. Đây là một hình thức kiểm tra lỗi - về cơ bản là một "điểm bán hàng" chính của Mã 39.

  • Giả sử, nếu bạn muốn "mã hóa" theo cách đó hai ký tự, bạn sẽ cần ít nhất hai bit. 0011tạo một bộ gồm hai chuỗi bit an toàn - ngắt (đảo ngược) một bit trong bất kỳ chuỗi nào trong số này và bạn sẽ nhận được mã không hợp lệ. Lưu ý rằng thiết lập 0110là an toàn, quá.
     
    Để mã hóa ba ký tự, một ký tự cần nhiều hơn hai bit.
    Ví dụ về bộ an toàn cho ba ký tự là 000, 110 và 011.

Bây giờ, bạn cần mã hóa 39 ký tự.

Đầu tiên, tìm bao nhiêu bit bạn cần cho việc đó, sau đó tìm một tập hợp "chuỗi bit an toàn".

Và chỉ sau đó, ánh xạ các nhân vật của bạn, như first char -> first safe bit sequence, second char -> second sequencevv

Bạn thấy đấy, việc nghĩ về "các bước" ở đây dễ dàng hơn, không phải là về "công thức".


Thuật toán tìm chuỗi bit an toàn cho số bit đã cho Ncó thể như sau,

  1. phân bổ mảng boolean có độ dài 2 power N, khởi tạo các phần tử của nó vớitrue
  2. bắt đầu với 0- biểu diễn boolean của nó là Ncác bit, mỗi số 0
  3. do Ntimes: đảo ngược một trong các bit trong 0 - đó sẽ là "chuỗi bit không an toàn",
    đánh dấu phần tử mảng tại mảng chỉ số kết quả false
    [1000], mảng [0100], mảng [0010], v.v.
  4. tìm tiếp theo sau 0chỉ mục trong mảng trong đó phần tử là true,
    để biểu diễn bit của chỉ mục đó, lặp lại cùng một vòng lặp như trên:
    đảo ngược một trong các bit và phần tử tương ứng ("không an toàn") của mảngfalse
  5. tìm truechỉ mục tiếp theo và cứ tiếp tục như vậy cho đến khi mảng kết thúc

Cuối cùng, các phần tử của mảng được đánh dấu truesẽ đại diện cho "chuỗi bit an toàn".

Để chuyển đổi các chuỗi này thành mã vạch, người ta chỉ cần ánh xạ các cặp bit một cách thích hợp, như 00 - đen hẹp, 01 - trắng hẹp, đen 10 rộng, trắng 11 rộng .


3

Trang Wikipedia bạn liên kết đến đề cập rằng

Thiết kế ban đầu của họ bao gồm hai thanh rộng và một khoảng trống trong mỗi ký tự, dẫn đến 40 ký tự có thể.

Để tham khảo, nó trích dẫn hồi ký của David Allais:

Tôi đã tiến hành minh họa một nhân vật biểu tượng bằng cách sử dụng mặt phấn để vẽ các thanh rộng. Cấu trúc của năm thanh và bốn không gian bao gồm hai thanh rộng và một không gian rộng đến với tôi trong nháy mắt. Hai trong số năm mã hóa trong các thanh có đủ mười kết hợp và không gian rộng được cung cấp cho bốn nhóm riêng biệt.

Vì vậy, trong tâm trí đó, chúng ta có thể xác định các thanh và khoảng trắng được đánh dấu và một mẫu xuất hiện:

  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

Lưu ý rằng các thanh cho 0trong phần đầu tiên thay vì tương ứng với 10ba phần khác. Nếu chúng ta xoay các thanh được đặt hàng 40123thì mẫu chúng ta thấy là

    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

đó là một trong những cách rõ ràng để liệt kê các cặp 5 yếu tố.

Tương tự, nếu bạn đặt tên cho các bit B1-S3-B2-S0-B3-S1-B4-S2-B0từ trái sang phải trong biểu diễn của mình và thay vào đó đại diện cho mỗi mã dưới dạng SBBcác chỉ số thì chuỗi 12..90AB..YZ-. *sẽ trở thành 010 020 021 030 031 032 040 041 042 043 110 120 ... 342 343.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.