El código 128 es una simbología de código de barras lineal de alta densidad definida en ISO / IEC 15417: 2007. [1] Se utiliza para códigos de barras alfanuméricos o solo numéricos . Puede codificar los 128 caracteres de ASCII y, mediante el uso de un símbolo de extensión (FNC4), los caracteres Latin-1 definidos en ISO / IEC 8859-1 . [ cita requerida ] . Generalmente da como resultado códigos de barras más compactos en comparación con otros métodos como el Código 39 , especialmente cuando los textos contienen principalmente dígitos.
GS1-128 (anteriormente conocido como UCC / EAN-128) es un subconjunto del Código 128 y se utiliza ampliamente en todo el mundo en las industrias de envío y embalaje como código de identificación de producto para los niveles de contenedores y palés en la cadena de suministro.
Un código de barras Code 128 tiene siete secciones:
El símbolo de verificación se calcula a partir de una suma ponderada ( módulo 103) de todos los símbolos.
El código 128 incluye 108 símbolos: 103 símbolos de datos, 3 símbolos de inicio y 2 símbolos de parada. Cada símbolo consta de tres barras negras y tres espacios en blanco de diferentes anchos. Todos los anchos son múltiplos de un "módulo" básico. Cada barra y espacio tiene de 1 a 4 módulos de ancho, y los símbolos son de ancho fijo: la suma de los anchos de las tres barras negras y tres barras blancas es 11 módulos.
El patrón de parada se compone de dos símbolos superpuestos y tiene cuatro barras. El patrón de parada permite un escaneo bidireccional. Cuando el patrón de parada se lee de izquierda a derecha (el caso habitual), se reconoce el símbolo de parada (seguido de una barra de 2 módulos). Cuando el patrón de parada se lee de derecha a izquierda, se reconoce el símbolo de parada inversa (seguido de una barra de 2 módulos). Un escáner que ve el símbolo de parada en reversa sabe que debe omitir la barra de 2 módulos y leer el resto del código de barras al revés.
A pesar de su nombre, Code 128 no tiene 128 símbolos distintos, por lo que no puede representar 128 puntos de código directamente. Para representar los 128 valores ASCII, cambia entre tres conjuntos de códigos (A, B, C). Juntos, los conjuntos de códigos A y B cubren los 128 caracteres ASCII. El conjunto de códigos C se utiliza para codificar eficazmente cadenas de dígitos. El subconjunto inicial se selecciona utilizando el símbolo de inicio apropiado. Dentro de cada conjunto de códigos, algunos de los 103 puntos de código de datos están reservados para cambiar a uno de los otros dos conjuntos de códigos. Los cambios se realizan utilizando los puntos de código 98 y 99 en los conjuntos de códigos A y B, 100 en los conjuntos de códigos A y C y 101 en los conjuntos de códigos B y C para cambiar entre ellos):
El ancho mínimo de la zona silenciosa a la izquierda y derecha del Código 128 es 10x, donde x es el ancho mínimo de un módulo. Es obligatorio en el lado izquierdo y derecho del código de barras.
Cada símbolo del código de barras se compone de tres barras y tres espacios. Cada barra o espacio tiene 1, 2, 3 o 4 unidades de ancho, la suma de los anchos de las barras debe ser par (4, 6 u 8 unidades), la suma de los anchos de los espacios debe ser impar (3, 5 o 7 unidades), y un total de 11 unidades por símbolo. Por ejemplo, la codificación del carácter ASCII "0" puede verse como 10011101100, donde una secuencia de unos es una barra y una secuencia de ceros es un espacio. Un solo 1 sería la línea más delgada del código de barras. Tres unos en secuencia (111) indican una barra tres veces más gruesa que una sola barra de 1.
Hay 108 posibles símbolos de 11 unidades de ancho y el código usa todos los símbolos posibles. Dos de los símbolos se utilizan para la indicación de parada (final del código de barras), parada y parada en reversa. Los dos símbolos de parada son especiales porque siempre van seguidos de una barra de 2 unidades, formando un patrón de parada de 13 unidades de largo. Leer el patrón de parada de izquierda a derecha es el símbolo de parada (seguido de una barra de 2 unidades), y leer el patrón de parada de derecha a izquierda es el símbolo de parada inversa (seguido de una barra de 2 unidades).
El dígito de control es una suma de control de módulo 103 ponderada. Se calcula sumando el 'valor' del código de inicio a los productos del 'valor' de cada símbolo multiplicado por su posición en la cadena del código de barras. El símbolo de inicio y el primer símbolo codificado están en la posición 1. La suma de los productos se reduce en módulo 103. El resto se convierte de nuevo en uno de los 103 símbolos no delimitadores (siguiendo las instrucciones que se dan a continuación ) y se agrega al código de barras. , inmediatamente antes del símbolo de parada.
Por ejemplo, en la siguiente tabla, se calcula el valor de suma de comprobación A de la variante del código 128 para la cadena alfanumérica PJJ123C:
Código | Valor | Posición | Valor × posición |
---|---|---|---|
Código de inicio A | 103 | 1 | 103 |
PAG | 48 | 1 | 48 |
J | 42 | 2 | 84 |
J | 42 | 3 | 126 |
1 | 17 | 4 | 68 |
2 | 18 | 5 | 90 |
3 | 19 | 6 | 114 |
C | 35 | 7 | 245 |
Suma | 878 | ||
Resto mod 103 | 54 |
Para calcular el símbolo de verificación, los símbolos de cambio y de cambio de código se tratan de la misma manera que cualquier otro símbolo en el código de barras. La suma de comprobación se calcula sobre los valores de los símbolos, sin tener en cuenta qué conjunto de códigos está activo en ese momento. Por ejemplo, el valor del conjunto de códigos C "33" y el valor del conjunto de códigos B "A" se consideran ambos un valor de Código 128 de 33, y el dígito de control se calcula en función del valor de 33 veces la posición del símbolo dentro del código de barras. .
El símbolo especial FNC4 ("Función 4"), presente solo en los conjuntos de códigos A y B, se puede utilizar para codificar todos los caracteres Latin-1 ( ISO-8859-1 ) en un código de barras Code 128. [2] La función no es ampliamente compatible y no se utiliza en GS1-128. [3] [4] Cuando un solo FNC4 está presente en una cadena, el siguiente símbolo se convierte a ASCII como de costumbre, y luego se agrega 128 al valor ASCII. (Si el siguiente símbolo es un cambio, se utilizará un segundo símbolo para obtener el carácter). Si se utilizan dos FNC4 consecutivamente, todos los caracteres siguientes se tratarán como tales, hasta el final de la cadena u otro par de FNC4 . Entre los FNC4 dobles, se utilizará un solo FNC4 para indicar que el siguiente carácter será ASCII estándar .[5]
Code128 especifica una combinación de 6 barras y espacios alternados (3 de cada uno) para cada símbolo. Así, cada símbolo comienza con una barra y termina con un espacio. En las fuentes de códigos de barras, la barra final generalmente se combina con el símbolo de parada para hacer un patrón de parada más amplio. La siguiente tabla detalla los anchos asociados con cada barra y el espacio para cada símbolo. El ancho de cada barra o espacio puede ser de 1, 2, 3 o 4 unidades (módulos). Usando el ejemplo anterior, se representaría una 'A' con el patrón 10100011000, o como anchos 111323 en las tablas siguientes.
El valor de los anchos se obtiene contando la longitud de cada serie de 1 y luego 0 en el patrón, comenzando por la izquierda. Siempre habrá 6 corridas y las longitudes de estas 6 corridas forman el valor de Anchuras. Por ejemplo, utilizando el patrón 10100011000, las longitudes de ejecución son 1 (dígito 1), 1 (dígito 0), 1 (dígito 1), 3 (dígito 0), 2 (dígito 1), 3 (dígito 0). Informar solo las longitudes de cada corrida da 1, 1, 1, 3, 2, 3, lo que produce un valor de ancho de 111323.
Valor | Valor hexadecimal | 128A | 128B | 128C | Posición de la fuente (común / poco común / Barcodesoft) | Bar / Espacio | ||
---|---|---|---|---|---|---|---|---|
Código | Latín-1 | Patrón | Anchos | |||||
0 | 00 | espacio | espacio | 00 | 32 o 194 o 207/212/252 | ␣ o  o Ï / Ô / ü | 11011001100 | 212222 |
1 | 01 | ! | ! | 01 | 33 | ! | 11001101100 | 222122 |
2 | 02 | " | " | 02 | 34 | " | 11001100110 | 222221 |
3 | 03 | # | # | 03 | 35 | # | 10010011000 | 121223 |
4 | 04 | PS | PS | 04 | 36 | PS | 10010001100 | 121322 |
5 | 05 | % | % | 05 | 37 | % | 10001001100 | 131222 |
6 | 06 | Y | Y | 06 | 38 | Y | 10011001000 | 122213 |
7 | 07 | ' | ' | 07 | 39 | ' | 10011000100 | 122312 |
8 | 08 | ( | ( | 08 | 40 | ( | 10001100100 | 132212 |
9 | 09 | ) | ) | 09 | 41 | ) | 11001001000 | 221213 |
10 | 0a | * | * | 10 | 42 | * | 11001000100 | 221312 |
11 | 0b | + | + | 11 | 43 | + | 11000100100 | 231212 |
12 | 0c | , | , | 12 | 44 | , | 10110011100 | 112232 |
13 | 0d | - | - | 13 | 45 | - | 10011011100 | 122132 |
14 | 0e | . | . | 14 | 46 | . | 10011001110 | 122231 |
15 | 0f | / | / | 15 | 47 | / | 10111001100 | 113222 |
dieciséis | 10 | 0 | 0 | dieciséis | 48 | 0 | 10011101100 | 123122 |
17 | 11 | 1 | 1 | 17 | 49 | 1 | 10011100110 | 123221 |
18 | 12 | 2 | 2 | 18 | 50 | 2 | 11001110010 | 223211 |
19 | 13 | 3 | 3 | 19 | 51 | 3 | 11001011100 | 221132 |
20 | 14 | 4 | 4 | 20 | 52 | 4 | 11001001110 | 221231 |
21 | 15 | 5 | 5 | 21 | 53 | 5 | 11011100100 | 213212 |
22 | dieciséis | 6 | 6 | 22 | 54 | 6 | 11001110100 | 223112 |
23 | 17 | 7 | 7 | 23 | 55 | 7 | 11101101110 | 312131 |
24 | 18 | 8 | 8 | 24 | 56 | 8 | 11101001100 | 311222 |
25 | 19 | 9 | 9 | 25 | 57 | 9 | 11100101100 | 321122 |
26 | 1a | : | : | 26 | 58 | : | 11100100110 | 321221 |
27 | 1b | ; | ; | 27 | 59 | ; | 11101100100 | 312212 |
28 | 1c | < | < | 28 | 60 | < | 11100110100 | 322112 |
29 | 1d | = | = | 29 | 61 | = | 11100110010 | 322211 |
30 | 1e | > | > | 30 | 62 | > | 11011011000 | 212123 |
31 | 1f | ? | ? | 31 | 63 | ? | 11011000110 | 212321 |
32 | 20 | @ | @ | 32 | 64 | @ | 11000110110 | 232121 |
33 | 21 | A | A | 33 | sesenta y cinco | A | 10100011000 | 111323 |
34 | 22 | B | B | 34 | 66 | B | 10001011000 | 131123 |
35 | 23 | C | C | 35 | 67 | C | 10001000110 | 131321 |
36 | 24 | D | D | 36 | 68 | D | 10110001000 | 112313 |
37 | 25 | mi | mi | 37 | 69 | mi | 10001101000 | 132113 |
38 | 26 | F | F | 38 | 70 | F | 10001100010 | 132311 |
39 | 27 | GRAMO | GRAMO | 39 | 71 | GRAMO | 11010001000 | 211313 |
40 | 28 | H | H | 40 | 72 | H | 11000101000 | 231113 |
41 | 29 | I | I | 41 | 73 | I | 11000100010 | 231311 |
42 | 2a | J | J | 42 | 74 | J | 10110111000 | 112133 |
43 | 2b | K | K | 43 | 75 | K | 10110001110 | 112331 |
44 | 2c | L | L | 44 | 76 | L | 10001101110 | 132131 |
45 | 2d | METRO | METRO | 45 | 77 | METRO | 10111011000 | 113123 |
46 | 2e | norte | norte | 46 | 78 | norte | 10111000110 | 113321 |
47 | 2f | O | O | 47 | 79 | O | 10001110110 | 133121 |
48 | 30 | PAG | PAG | 48 | 80 | PAG | 11101110110 | 313121 |
49 | 31 | Q | Q | 49 | 81 | Q | 11010001110 | 211331 |
50 | 32 | R | R | 50 | 82 | R | 11000101110 | 231131 |
51 | 33 | S | S | 51 | 83 | S | 11011101000 | 213113 |
52 | 34 | T | T | 52 | 84 | T | 11011100010 | 213311 |
53 | 35 | U | U | 53 | 85 | U | 11011101110 | 213131 |
54 | 36 | V | V | 54 | 86 | V | 11101011000 | 311123 |
55 | 37 | W | W | 55 | 87 | W | 11101000110 | 311321 |
56 | 38 | X | X | 56 | 88 | X | 11100010110 | 331121 |
57 | 39 | Y | Y | 57 | 89 | Y | 11101101000 | 312113 |
58 | 3a | Z | Z | 58 | 90 | Z | 11101100010 | 312311 |
59 | 3b | [ | [ | 59 | 91 | [ | 11100011010 | 332111 |
60 | 3c | \ | \ | 60 | 92 | \ | 11101111010 | 314111 |
61 | 3d | ] | ] | 61 | 93 | ] | 11001000010 | 221411 |
62 | 3e | ^ | ^ | 62 | 94 | ^ | 11110001010 | 431111 |
63 | 3f | _ | _ | 63 | 95 | _ | 10100110000 | 111224 |
64 | 40 | NUL | ' | 64 | 96 | ' | 10100001100 | 111422 |
sesenta y cinco | 41 | SOL | a | sesenta y cinco | 97 | a | 10010110000 | 121124 |
66 | 42 | STX | B | 66 | 98 | B | 10010000110 | 121421 |
67 | 43 | ETX | C | 67 | 99 | C | 10000101100 | 141122 |
68 | 44 | EOT | D | 68 | 100 | D | 10000100110 | 141221 |
69 | 45 | ENQ | mi | 69 | 101 | mi | 10110010000 | 112214 |
70 | 46 | ACK | F | 70 | 102 | F | 10110000100 | 112412 |
71 | 47 | BEL | gramo | 71 | 103 | gramo | 10011010000 | 122114 |
72 | 48 | BS | h | 72 | 104 | h | 10011000010 | 122411 |
73 | 49 | HT | I | 73 | 105 | I | 10000110100 | 142112 |
74 | 4a | LF | j | 74 | 106 | j | 10000110010 | 142211 |
75 | 4b | Vermont | k | 75 | 107 | k | 11000010010 | 241211 |
76 | 4c | FF | l | 76 | 108 | l | 11001010000 | 221114 |
77 | 4d | CR | metro | 77 | 109 | metro | 11110111010 | 413111 |
78 | 4e | ASI QUE | norte | 78 | 110 | norte | 11000010100 | 241112 |
79 | 4f | SI | o | 79 | 111 | o | 10001111010 | 134111 |
80 | 50 | DLE | pag | 80 | 112 | pag | 10100111100 | 111242 |
81 | 51 | DC1 | q | 81 | 113 | q | 10010111100 | 121142 |
82 | 52 | DC2 | r | 82 | 114 | r | 10010011110 | 121241 |
83 | 53 | DC3 | s | 83 | 115 | s | 10111100100 | 114212 |
84 | 54 | DC4 | t | 84 | 116 | t | 10011110100 | 124112 |
85 | 55 | NAK | tu | 85 | 117 | tu | 10011110010 | 124211 |
86 | 56 | SYN | v | 86 | 118 | v | 11110100100 | 411212 |
87 | 57 | ETB | w | 87 | 119 | w | 11110010100 | 421112 |
88 | 58 | PUEDEN | X | 88 | 120 | X | 11110010010 | 421211 |
89 | 59 | EM | y | 89 | 121 | y | 11011011110 | 212141 |
90 | 5a | SUB | z | 90 | 122 | z | 11011110110 | 214121 |
91 | 5b | ESC | { | 91 | 123 | { | 11110110110 | 412121 |
92 | 5c | FS | | | 92 | 124 | | | 10101111000 | 111143 |
93 | 5d | GS | } | 93 | 125 | } | 10100011110 | 111341 |
94 | 5e | RS | ~ | 94 | 126 | ~ | 10001011110 | 131141 |
95 | 5f | nosotros | DEL | 95 | 195/200/240 | Ã / È / ð | 10111101000 | 114113 |
96 | 60 | FNC 3 | FNC 3 | 96 | 196/201/241 | Ä / É / ñ | 10111100010 | 114311 |
97 | 61 | FNC 2 | FNC 2 | 97 | 197/202/242 | Å / Ê / ò | 11110101000 | 411113 |
98 | 62 | Cambio B | Cambio A | 98 | 198/203/243 | Æ / Ë / ó | 11110100010 | 411311 |
99 | 63 | Código C | Código C | 99 | 199/204/244 | Ç / Ì / ô | 10111011110 | 113141 |
100 | 64 | Código B | FNC 4 | Código B | 200/205/245 | È / Í / õ | 10111101110 | 114131 |
101 | sesenta y cinco | FNC 4 | Código A | Código A | 201/206/246 | É / Î / ö | 11101011110 | 311141 |
102 | 66 | FNC 1 | FNC 1 | FNC 1 | 202/207/247 | Ê / Ï / ÷ | 11110101110 | 411131 |
103 | 67 | Código de inicio A | 203/208/248 | Ë / Ð / ø | 11010000100 | 211412 | ||
104 | 68 | Código de inicio B | 204/209/249 | Ì / Ñ / ù | 11010010000 | 211214 | ||
105 | 69 | Código de inicio C | 205/210/250 | Í / Ò / ú | 11010011100 | 211232 | ||
106 | 6a | Parada | - | - | 11000111010 | 233111 | ||
- | - | Parada inversa | - | - | 11010111000 | 211133 | ||
- | - | Patrón de parada (7 barras / espacios) | 206/211/251 | Î / Ó / û | 1100011101011 | 2331112 |
Los símbolos "Código A", "Código B" y "Código C" hacen que todos los símbolos siguientes se interpreten de acuerdo con el subcódigo correspondiente (es decir, 128A, 128B o 128C). El símbolo "Shift" cambia la interpretación de un solo símbolo siguiente entre los subcódigos A y B.
El carácter ASCII codificado depende de la fuente de código de barras utilizada. Especialmente, el carácter ASCII de valor 0 y de valor 95 y superior puede definirse de manera diferente en la fuente que está instalada.
Los códigos FNC x se utilizan para fines especiales. FNC1 al comienzo de un código de barras indica un código de barras GS1-128 que comienza con un identificador de aplicación de 2 a 3 o 4 dígitos asignado por el Uniform Code Council , que explica los siguientes dígitos. Por ejemplo, el identificador de aplicación 421 indica que sigue un código de país numérico ISO 3166-1 y un código postal de destino. Por lo tanto, el código postal de EE. UU. Para la Casa Blanca generalmente se imprime como "(421) 840 20500", pero en realidad se codifica como " [Start C] [FNC1] 42 18 40 20 50 [Code A] 16 [Check symbol 92] [Stop]
".
Verifique el cálculo de dígitos para el ejemplo de código postal anterior:
Valor | Peso | Peso × valor | |
---|---|---|---|
Iniciar C | 105 | 1 | 105 |
FNC1 | 102 | 1 | 102 |
42 | 42 | 2 | 84 |
18 | 18 | 3 | 54 |
40 | 40 | 4 | 160 |
20 | 20 | 5 | 100 |
50 | 50 | 6 | 300 |
Código A | 101 | 7 | 707 |
0 | dieciséis | 8 | 128 |
Suma = | 1740 | ||
1740 | Mod 103 = | 92 |
Para el usuario final, los códigos de barras Code 128 pueden ser generados por una aplicación externa para crear una imagen del código de barras o por una solución de código de barras basada en fuentes. Cualquiera de las soluciones requiere el uso de una aplicación o un complemento de aplicación para calcular el dígito de control y crear el código de barras.
El conjunto de códigos C usa un símbolo de código para representar dos dígitos, por lo que cuando el texto contiene solo dígitos, generalmente resultará en códigos de barras más cortos. Sin embargo, cuando la cadena contiene solo unos pocos dígitos o se mezcla con caracteres que no son dígitos, no siempre produce un código más compacto que los conjuntos de códigos A o B. El uso del conjunto de códigos C ahorra un símbolo por cada dos dígitos, pero cuesta un modo -Símbolo de cambio para entrar y salir del conjunto. Por lo tanto, solo vale la pena usarlo si hay suficientes dígitos consecutivos. Por ejemplo, codificar la cadena "X00Y" con el conjunto de códigos A o B requiere 7 símbolos de código ( [Start B] 56 16 16 57 [checksum] [Stop]
), mientras que usar el conjunto de códigos C para el "00" daría como resultado un código de 8 símbolos de longitud ( [Start B] 56 [Code C] 00 [Code B] 57 [checksum] [Stop]
).
El uso del conjunto de códigos C solo es ventajoso en las siguientes condiciones:
Ubicación de dígitos | Número de dígitos consecutivos |
---|---|
comienzo de datos | 4+ |
fin de datos | 4+ |
medio de datos (rodeado por símbolos del conjunto de códigos A o B) | 6+ |
datos completos | ya sea 2 o 4+ (pero no 3) |
Al final de una cadena, retrasar la transición al conjunto de códigos C hasta que quede un número par de dígitos evita un símbolo adicional. Considere la cadena "... 01234": un cambio retrasado produce ... 0 [Code C] 12 34 [checksum] [Stop]
pero produce un cambio temprano ... [Code C] 01 23 [Code A] 4 [checksum] [Stop]
. [6]
Por ejemplo, dada la cadena "098x1234567y23", los ahorros en la longitud del código de barras utilizando el conjunto de códigos C se logran solo si se aplica a la parte media de la cadena. Para la parte inicial y final de la cadena, el cambio al conjunto de códigos C no es efectivo. Como hay un número impar de dígitos en el medio de la cadena, el impar debe usar un código diferente, establecido, pero no importa si es el primero o el último; Se requieren 16 símbolos en cualquier caso:, [Start B] 0 9 8 x 1 [Code C] 23 45 67 [Code B] y 2 3 [checksum] [Stop]
o [Start B] 0 9 8 x [Code C] 12 34 56 [Code B] 7 y 2 3 [checksum] [Stop]
.
La optimización de la longitud del código de barras resultante es importante cuando se utilizan lectores de códigos de barras que deben detectar la imagen completa del código de barras a la vez para poder leerla, como los escáneres láser comunes . Cuanto más largo es el código de barras, se necesita mayor distancia entre el lector de códigos de barras láser y la imagen del código de barras, lo que dificulta o imposibilita la lectura por encima de algunas longitudes / distancias de umbral.
La codificación óptima se puede encontrar utilizando un algoritmo de programación dinámica . [7]
En principio, los caracteres no ASCII como diéresis alemanas (p. Ej., ÄÖÜ) se pueden codificar en un símbolo Code 128 utilizando un carácter especial (FNC4).
Sin embargo, esta función no es ampliamente compatible.
Usar una simbología de código de barras 2D como Aztec o Datamatrix con soporte dedicado para datos que no son ASCII podría ser una mejor opción.
Si se utiliza un solo carácter "FNC 4", indica que el siguiente carácter de datos en el símbolo es un carácter ASCII extendido. Un carácter 'SHIFT' puede seguir al carácter 'FNC 4' si es necesario cambiar el subconjunto de caracteres para el siguiente carácter de datos. Los caracteres de datos posteriores vuelven al juego de caracteres ASCII estándar. Si se utilizan dos caracteres 'FNC4' consecutivos, todos los caracteres de datos siguientes son caracteres ASCII extendidos hasta que se encuentren dos caracteres 'FNC4' consecutivos más o se alcance el final del símbolo. Si durante esta secuencia de codificación extendida se encuentra un solo carácter "FNC4", se utiliza para volver a la codificación ASCII estándar solo para el siguiente carácter de datos. 'CAMBIO'y los caracteres del subconjunto de caracteres tendrán su efecto normal durante dicha secuencia.
La programación dinámica condujo a una codificación un 8% más ajustada en promedio.
Es posible que el uso de enlaces externos en este artículo no siga las políticas o pautas de Wikipedia . ( Enero de 2015 ) |