Fondo: 3 de 9 Alfabeto de código de barras
Una sintaxis simple para 3 de 9 códigos de barras
¿Cuál es la fórmula detrás del alfabeto y los dígitos en un código de barras 3 de 9?
Por ejemplo, ASCII tiene una disposición relativamente clara. Los números comienzan en 33, las mayúsculas en 65, las minúsculas en 97. Desde estos puntos de partida puede inferir el código ASCII para cualquier número o letra. El punto de inicio para cada rango también es un múltiplo de 32 + 1.
Los códigos de barras parecen aleatorios y carecen de secuencia. Si usamos la sintaxis del segundo enlace, estos son los primeros seis caracteres en 3 de 9:
A 100-01
B 010-01
C 110-00
D 001-01
E 101-00
F 011-00
No veo ningún patrón aquí; ¿Qué es? Estoy tan interesado en el patrón previsto del diseñador detrás de estos como estoy en alguien que diseñe un algoritmo propio que pueda darle el código anterior para un personaje determinado en función de su secuencia.
Luché con dónde poner esta pregunta; ¿Es historia, informática, ciencia de la información? Elegí Programadores porque una búsqueda de StackExchange tuvo la mayor cantidad de aciertos de código de barras aquí, y porque quería relacionarlo específicamente con ASCII para explicar qué tipo de fórmula / explicación estoy buscando.
Actualizar
Para los curiosos, aquí está la lista completa de todos los caracteres básicos en el Código 39: http://jsfiddle.net/b9chris/LnX2e/2/
(las líneas de origen se toman de mi código de barras C # lib )
Notará que la sintaxis simplificada propuesta puede confundir un poco el problema, ya que puede implicar que cada carácter es un número de 5 bits con una posición de guión. Los 4 personajes finales tienen numerosos guiones (espacios amplios). Realmente, estos códigos se consideran mejor como números de 9 bits que tienen la mayoría de los bits impares establecidos en 0 para la mayoría de los símbolos. Aquí están como números de 9 bits: http://jsfiddle.net/b9chris/LnX2e/1/
fuente
Respuestas:
No sé si esta es la explicación correcta, pero según lo que publicaste: los primeros 3 bits son 1 a 6 en binario inverso. El último dígito es 1 cuando hay un número impar de 1s en los primeros 3 (4?) Bits, por lo que probablemente sea un bit de paridad.
fuente
El patrón correcto para pensar cómo funciona esta codificación es que 1) encuentre un conjunto de "secuencias de bits seguras", luego 2) asigne sus caracteres a estas secuencias.
El resultado final se siente como un orden aleatorio, pero cada uno de estos pasos es bastante lógico per se.
Las secuencias de bits "seguras" son tales que si invierte un solo bit en cualquiera de ellas, el resultado estará "fuera" de su conjunto. Esta es una forma de verificación de errores, básicamente un importante "punto de venta" del Código 39.
00
y11
haga un conjunto de dos secuencias de bits seguras: rompa (invierta) un bit en cualquiera de estas y obtendrá un código no válido. Tenga en cuenta que el conjunto de01
y también10
es seguro.Para codificar tres caracteres, uno necesita más de dos bits.
Ejemplo de conjunto seguro para tres caracteres es 000, 110 y 011.
Ahora, necesita codificar 39 caracteres.
Primero, encuentre cuántos bits necesita para eso, luego encuentre un conjunto de "secuencias de bits seguras".
Y solo después de eso, mapea tus personajes, como
first char -> first safe bit sequence
,second char -> second sequence
etc.Verá, es más fácil pensar en términos de "pasos" aquí, no en términos de "fórmula".
Algoritmo para encontrar secuencias de bits seguras para un número dado de bits
N
podría ser de la siguiente manera,2 power N
, inicializar sus elementos contrue
0
- su representación booleana esN
bits, cada ceroN
veces: invierta uno de los bits en 0, que será "secuencia de bits insegura",marque el elemento de matriz en la matriz de índice resultante
false
[1000], matriz [0100], matriz [0010], etc.
0
índice en la matriz donde está el elementotrue
,para la representación de bits de ese índice, repita el mismo bucle que el anterior:
invierta uno de los bits y marque el elemento respectivo ("inseguro") de la matriz
false
true
índice y así sucesivamente hasta que finalice la matrizAl final, los elementos de la matriz marcados
true
representarán "secuencias de bits seguras".Para transformar estas secuencias en código de barras, uno simplemente mapearía pares de bits apropiadamente, como 00 - negro estrecho, 01 - blanco estrecho, 10 - ancho negro, 11 - ancho blanco .
fuente
La página de Wikipedia a la que enlaza menciona que
Como referencia cita las memorias de David Allais:
Con eso en mente, podemos identificar las barras y espacios marcados y surge un patrón:
Tenga en cuenta que las barras para
0
en la primera sección corresponden en cambio a10
las otras tres secciones. Si giramos las barras a ordenar,40123
entonces el patrón que vemos esque es una de las formas obvias de enumerar pares de 5 elementos.
De manera equivalente, si nombra los bits
B1-S3-B2-S0-B3-S1-B4-S2-B0
de izquierda a derecha en su representación y en su lugar representa cada código comoSBB
índices, entonces la secuencia se12..90AB..YZ-. *
convierte010 020 021 030 031 032 040 041 042 043 110 120 ... 342 343
.fuente