Código 128

Formato de código de barras
Código de barras postal suizo que codifica "RI 476 394 652 CH" en el código 128 (B y C)

El código 128 es una simbología de código de barras lineal de alta densidad definida en la norma 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 la norma 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. El Código 128 fue desarrollado por Computer Identics Corporation en 1981. [2]

Un código de barras GS1-128 que codifica GTIN, fecha de caducidad y número de lote

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 un código de identificación de producto para los niveles de contenedor y pallet en la cadena de suministro.

Especificación

"Código 459
Esquema de un código de barras (Código 128B).
1 : zona tranquila, 2 : código de inicio B, 3 : datos, 4 : suma de comprobación, 5 : fin

Un código de barras Código 128 tiene siete secciones:

  1. Zona tranquila
  2. Símbolo de inicio
  3. Datos codificados
  4. Símbolo de verificación (obligatorio)
  5. Símbolo de parada
  6. Barra final (a menudo considerada parte del símbolo de parada)
  7. Zona tranquila

El símbolo de verificación se calcula a partir de una suma ponderada ( módulo 103) de todos los símbolos.

Subtipos

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 blancos de anchos variables. 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 tienen un ancho fijo: la suma de los anchos de las tres barras negras y las tres barras blancas es de 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 inverso (seguido de una barra de 2 módulos). Un escáner que ve el símbolo de parada inverso sabe que debe omitir la barra de 2 módulos y leer el resto del código de barras en sentido inverso.

A pesar de su nombre, el código 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 de forma eficiente cadenas de dígitos. El subconjunto inicial se selecciona utilizando el símbolo de inicio adecuado. Dentro de cada conjunto de códigos, algunos de los 103 puntos de código de datos se reservan 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):

  • 128A (Conjunto de códigos A): caracteres ASCII del 00 al 95 (0–9, A–Z y códigos de control), caracteres especiales y FNC 1–4
  • 128B (Conjunto de códigos B): caracteres ASCII 32 a 127 (0–9, A–Z, a–z), caracteres especiales y FNC 1–4
  • 128C (Conjunto de códigos C): 00–99 (codifica dos dígitos con un solo punto de código) y FNC1

El ancho mínimo de la zona silenciosa a la izquierda y a la 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.

Inicio/parada y ancho de barra

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 el total es de 11 unidades por símbolo. Por ejemplo, la codificación del carácter ASCII "0" se puede ver como 10011101100, donde una secuencia de 1 es una barra y una secuencia de 0 es un espacio. Un solo 1 sería la línea más delgada del código de barras. Tres 1 en secuencia (111) indican una barra tres veces más gruesa que una sola barra de 1.

Hay 108 símbolos posibles de 11 unidades de ancho, y el código utiliza todos los símbolos posibles. Dos de los símbolos se utilizan para indicar la parada (fin del código de barras), parada y parada inversa. 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. Al leer el patrón de parada de izquierda a derecha se encuentra el símbolo de parada (seguido de una barra de 2 unidades), y al leer el patrón de parada de derecha a izquierda se encuentra el símbolo de parada inversa (seguido de una barra de 2 unidades).

Cálculo del dígito de control

El dígito de control es una suma de comprobación ponderada módulo 103. Se calcula sumando el "valor" del código de inicio con los productos del "valor" de cada símbolo multiplicado por el peso de su posición en la cadena de 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 entonces módulo 103. El resto se convierte entonces de nuevo en uno de los 103 símbolos no delimitadores (siguiendo las instrucciones que se dan a continuación) y se añade 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 de la variante A del código 128 para la cadena alfanumérica PJJ123C:

CódigoValorPesoValor × Peso
Código de inicio A103(1)103
PAG48148
Yo42284
Yo423126
117468
218590
3196114
do357245
Suma878
Resto mod 10354

Entonces se añade el valor 54, que equivale a una V, y luego se muestra el código de detención.

A los efectos de calcular el símbolo de verificación, los símbolos de cambio de código y de desplazamiento se tratan igual que cualquier otro símbolo en el código de barras.

Uso de FNC4 para codificar caracteres altos (160–255)

El símbolo especial FNC4 ("Función 4"), presente sólo 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. [3]

Cuando hay un solo 'FNC4' en una cadena, el símbolo siguiente se lee como ASCII, pero el valor se incrementa en +128, tomando así el rango superior de la tabla ISO-8859-1. Si el símbolo siguiente es un 'SHIFT', se utilizará un segundo símbolo para obtener el carácter.

Si se utilizan dos caracteres 'FNC4' consecutivos, todos los caracteres de datos siguientes son caracteres ASCII extendidos hasta que se encuentren otros dos caracteres 'FNC4' consecutivos o se llegue al 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 únicamente para el siguiente carácter de datos. 'SHIFT' y los caracteres de subconjunto de caracteres tendrán su efecto normal durante dicha secuencia. [4]

A partir del código 128A, puede acceder a los caracteres especiales Latin-1 desde 160 (hex A0, espacio sin separación) hasta 223 (hex DF, ß) mediante FNC4. Los caracteres en minúscula desde 224 (hex E0, à) hasta 254 (hex FE, þ) están disponibles mediante FNC4+SHIFT B. Los caracteres ÷ (247, hex F7) y ÿ (255, hex FF) no están disponibles.

La función no está disponible para GS1-128. [5] [6] Dado que la compatibilidad con el Código 128 Tipo B (y C) no es muy común, podría ser más fácil usar un Código QR para caracteres del rango de códigos ISO-8859-1.

Anchos de códigos de barras

El código 128 especifica una combinación de 6 barras y espacios alternados (3 de cada uno) para cada símbolo. Por lo tanto, 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 formar un patrón de parada más ancho. La siguiente tabla detalla los anchos asociados con cada barra y 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, una 'A' se representaría con el patrón 10100011000, o con anchos 111323 en las tablas siguientes.

El valor de los anchos se obtiene contando la longitud de cada serie de 1 y luego de 0 en el patrón, comenzando desde la izquierda. Siempre habrá 6 series y las longitudes de estas 6 series forman el valor de los anchos. Por ejemplo, si se utiliza el patrón 10100011000, las longitudes de las series 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). Si se informan solo las longitudes de cada serie, se obtiene 1, 1, 1, 3, 2, 3, lo que produce un valor de ancho de 111323.

Código 128
ValorValor hexadecimal128A128B128CPosición de la fuente
(Común/Poco común/Barcodesoft)
Barra/Espacio
Códigolatín-1PatrónAnchos
000espacioespacio0032 o 194 o 207 / 212 / 252 o  o Ï / Ô / ü11011001100212222
101!!0133!11001101100222122
202""0234"11001100110222221
303##0335#10010011000121223
404$$0436$10010001100121322
505%%0537%10001001100131222
606&&0638&10011001000122213
707''0739'10011000100122312
808((0840(10001100100132212
909))0941)11001001000221213
100a**1042*11001000100221312
110b++1143+11000100100231212
120c,,1244,10110011100112232
130d--1345-10011011100122132
140e..1446.10011001110122231
150 de//1547/10111001100113222
1610001648010011101100123122
1711111749110011100110123221
1812221850211001110010223211
1913331951311001011100221132
2014442052411001001110221231
2115552153511011100100213212
2216662254611001110100223112
2317772355711101101110312131
2418882456811101001100311222
2519992557911100101100321122
261a::2658:11100100110321221
271b;;2759;11101100100312212
281c<<2860<11100110100322112
291d==2961=11100110010322211
301e>>3062>11011011000212123
311f??3163?11011000110212321
3220@@3264@11000110110232121
3321AA3365A10100011000111323
3422BB3466B10001011000131123
3523dodo3567do10001000110131321
3624DD3668D10110001000112313
3725mimi3769mi10001101000132113
3826FF3870F10001100010132311
3927GRAMOGRAMO3971GRAMO11010001000211313
4028yoyo4072yo11000101000231113
4129II4173I11000100010231311
422aYoYo4274Yo10110111000112133
432bKK4375K10110001110112331
442cyoyo4476yo10001101110132131
452dMETROMETRO4577METRO10111011000113123
462enortenorte4678norte10111000110113321
472fOhOh4779Oh10001110110133121
4830PAGPAG4880PAG11101110110313121
4931QQ4981Q11010001110211331
5032RR5082R11000101110231131
5133SS5183S11011101000213113
5234yoyo5284yo11011100010213311
5335538511011101110213131
5436VV5486V11101011000311123
5537YoYo5587Yo11101000110311321
5638incógnitaincógnita5688incógnita11100010110331121
5739YY5789Y11101101000312113
583aOO5890O11101100010312311
593b[[5991[11100011010332111
603c\\6092\11101111010314111
613 dimensiones]]6193]11001000010221411
623e^^6294^11110001010431111
633f__6395_10100110000111224
6440Nulo`6496`10100001100111422
6541SOLa6597a10010110000121124
6642Txb6698b10010000110121421
6743ETXdo6799do10000101100141122
6844ETEd68100d10000100110141221
6945ENQmi69101mi10110010000112214
7046Acuse de reciboF70102F10110000100112412
7147BELgramo71103gramo10011010000122114
7248Licenciatura en Cienciasyo72104yo10011000010122411
7349altai73105i10000110100142112
744aSiyo74106yo10000110010142211
754bVermonta75107a11000010010241211
764cFFyo76108yo11001010000221114
774dESmetro77109metro11110111010413111
784eENTONCESnorte78110norte11000010100241112
794fSIo79111o10001111010134111
8050DLEpag80112pag10100111100111242
8151DC1q81113q10010111100121142
8252DC2a82114a10010011110121241
8353DC3s83115s10111100100114212
8454DC4a84116a10011110100124112
8555No se puede8511710011110010124211
8656SINÓNIMOen86118en11110100100411212
8757ETBel87119el11110010100421112
8858PODERincógnita88120incógnita11110010010421211
8959Eny89121y11011011110212141
905aSUBel90122el11011110110214121
915bESC{91123{11110110110412121
925cEs|92124|10101111000111143
935dGS}93125}10100011110111341
945eR.R.~94126~10001011110131141
955fA NOSOTROSDEL95195 / 200 / 240É / É / ð10111101000114113
9660FNC 3FNC 396196 / 201 / 241A / É / ñ10111100010114311
9761FNC 2FNC 297197 / 202 / 242Å / Ê / ò11110101000411113
9862Cambio BCambio A98198 / 203 / 243Æ / Ë / ó11110100010411311
9963Código CCódigo C99199 / 204 / 244C / Ì / ô10111011110113141
10064Código BFNC 4Código B200 / 205 / 200Y / Í / Y10111101110114131
10165FNC 4Código ACódigo A201 / 206 / 246É / Î / ö11101011110311141
10266FNC1FNC1FNC1202 / 207 / 247Ê / Ï / ÷11110101110411131
10367Código de inicio A203 / 208 / 248E / Ð / ø11010000100211412
10468Código de inicio B204 / 209 / 249Í / Ñ / ù11010010000211214
10569Código de inicio C205 / 210 / 250Í / Ò / ú11010011100211232
1066aDetener11000111010233111
Parada inversa11010111000211133
Patrón de parada (7 compases/espacios)206 / 211 / 251Î / Ó / û11000111010112331112

Los símbolos "Código A", "Código B" y "Código C" hacen que todos los símbolos siguientes se interpreten según 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. En particular, el carácter ASCII de valor 0 y de valor 95 y superior puede estar definido de forma diferente en la fuente 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, 3 o 4 dígitos asignado por el Consejo de Código Uniforme , que explica los dígitos siguientes. Por ejemplo, el identificador de aplicación 421 indica que a continuación se incluye un código numérico de país 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 imprimiría como "(421) 840 20500", pero en realidad se codificaría como " [Start C] [FNC1] 42 18 40 20 50 [Code A] 16 [Check symbol 92] [Stop]"

FNC2 (mensaje adjunto) puede aparecer en cualquier parte de un código de barras para indicar que el lector de códigos de barras debe almacenar la cadena actual y anteponerla a la cadena del próximo código de barras que se lea. No se utiliza en GS1-128.

FNC3 (inicializar) puede aparecer en cualquier lugar dentro de un código de barras para indicarle al lector de código de barras que se inicialice o reprograme de acuerdo con las instrucciones de la cadena del código de barras.

FNC4 se utiliza para representar un conjunto de caracteres ASCII extendido (consulte § Uso de FNC4 para codificar caracteres altos (160–255)). No lo utiliza GS1-128. [7]

Disponibilidad

Para el usuario final, los códigos de barras Code 128 pueden generarse mediante una aplicación externa para crear una imagen del código de barras o mediante 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.

Optimización de la longitud del código de barras mediante el Código 128 Tipo C

El conjunto de códigos C utiliza un símbolo de código para representar dos dígitos. Por lo tanto, puede crear códigos de barras más cortos si el contenido consta únicamente de números o si hay secuencias más largas de dígitos dentro del código.

Sin embargo, cuando la cadena contiene solo unos pocos dígitos o está mezclada 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 símbolo de cambio de modo 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 "X00Y" 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 sólo es ventajoso en las siguientes condiciones:

Ubicación de los dígitosNúmero de dígitos consecutivos
comienzo de datos4+
fin de datos4+
centro de los datos (rodeado de símbolos del conjunto de códigos A o B)6+
datos completosya 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 un cambio anticipado produce ... [Code C] 01 23 [Code A] 4 [checksum] [Stop]. [8]

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, cambiar 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 utilizar un conjunto de códigos diferente, pero no hay diferencia si este es el primero o el último; se requieren 16 símbolos en ambos casos: [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].

Optimizar la longitud del código de barras resultante es importante cuando se utilizan lectores de códigos de barras que deben detectar toda la imagen del código de barras a la vez para poder leerlo, como los escáneres láser comunes . Cuanto más largo sea el código de barras, mayor será la distancia que se necesitará 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 ciertos límites de longitud o distancia.

La codificación óptima se puede encontrar utilizando un algoritmo de programación dinámica . [9]

Referencias

  1. ^ "ISO/IEC 15417:2007 - Tecnología de la información - Técnicas de identificación automática y captura de datos - Especificación de simbología del código de barras 128". www.iso.org . Consultado el 15 de febrero de 2018 .
  2. ^ "CODE 128 y GS1-128". Información y consejos sobre códigos de barras . Keyence . Consultado el 6 de noviembre de 2023 .
  3. ^ Aparentemente ISO 15417 Anexo F
  4. ^ "TBarcode1D_Code128". Corporación Han-soft . Consultado el 21 de enero de 2017. 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 subsiguientes vuelven al conjunto 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 llegue al 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. Los caracteres "SHIFT" y del subconjunto de caracteres tendrán su efecto normal durante dicha secuencia.
  5. ^ "Explicación del código 128". Softmatic GmbH . Consultado el 21 de enero de 2017. En principio, los caracteres no ASCII, como las diéresis alemanas (por ejemplo, ÄÖÜ), se pueden codificar en un símbolo de código 128 mediante un carácter especial (FNC4). Sin embargo, esta función no es ampliamente compatible. El uso de una simbología de código de barras 2D como Aztec o Datamatrix con soporte dedicado para datos no ASCII podría ser una mejor opción.
  6. ^ Especificaciones generales de GS1 (enero de 2006, versión 7.0), sección 5.3.1.1 Características de simbología GS1-128, que establece que "los caracteres con valores ASCII de 128 a 255 también pueden codificarse en símbolos de código 128. Los caracteres con valores ASCII de 128 a 255 a los que se accede mediante el Carácter de función 4 (FNC4) están reservados para uso futuro y no se utilizan en los símbolos de código de barras GS1-128".
  7. ^ "5.4.3.4.2 Caracteres de función". Estándar de especificaciones generales GS1 . Versión 23.0. GS1 AISBL: 287. Enero de 2023. Consultado el 28 de junio de 2023 .
  8. ^ Especificaciones generales de GS1, versión 13, número 1, enero de 2013, sección 5.4.7.7. Uso de símbolos de inicio, conjunto de códigos y desplazamiento para minimizar la longitud de los símbolos (informativo), páginas 268 a 269. Esta sección proporciona la estrategia de compresión.
  9. ^ Skiena, Steven S. (2010). "8.9 War Story: Text Compression for Bar Codes". Manual de diseño de algoritmos (2.ª edición). Springer. ISBN 978-1-849-96720-4La programación dinámica condujo a una codificación un 8% más estricta en promedio.
  • Generador de códigos de barras en línea Code128
  • Especificación GS1-128: una lista detallada de identificadores de aplicación.
  • Barcodesoft: mapeo de fuentes de Barcodesoft, que difiere del mapeo ASCII común (consulte http://ascii-code.com/).
  • El código 128: aprenda el algoritmo de codificación del código 128 con una solución de código de barras basada en fuentes.
  • Generador de códigos de barras en línea: generador de códigos de barras en línea gratuito para los distintos tipos de códigos de barras.
  • Descripción general de los tipos de códigos de barras: descripción general de los tipos de códigos de barras 1D y 2D más comunes
  • Generador de códigos de barras en línea: generador de códigos de barras en línea gratuito, 1D y 2D.

Código de muestra

  • ZXing – Lector/generador de códigos de barras multiplataforma de código abierto con versiones disponibles en Java (proyecto principal) y puertos para ActionScript, C++, C#, ObjectiveC y Ruby.
  • Código de barras Python 128: este código parece dibujar cuadros de un píxel de ancho. Parece que se modificó a partir de un código de barras de línea corta y línea larga que habría dibujado líneas. Los "cuadros negros" deben tener el mismo tamaño que los "cuadros blancos".
  • GenCode128: implementación gratuita en código fuente C# de Code128. Se han implementado casi todas las funciones, pero no está 100 % completo.
  • Gema Ruby de Barcode1DTools: código fuente Ruby para muchas simbologías de códigos de barras 1D, incluido el Código 128.
  • Código de generación de código de barras Perl: código fuente Perl para muchas simbologías de códigos de barras 1D, incluido el Código 128.
  • Barcode::Code128 – Módulo gratuito de generación de códigos de barras Perl.
  • GOCR – OCR gratuito con reconocimiento de código 128.
  • Código de barras Código 128: implementación gratuita del código fuente JavaScript de Code128.
  • Barcode4J – API Java gratuita con implementación de Code128 y otros códigos de barras estándar.
  • JavaScript Code 128: implementación de JavaScript de código abierto de Code128 y otros códigos de barras lineales.
  • Introducción a la creación de códigos de barras Code 128 Guía para convertir texto en códigos de barras Code 128. Escrito para Lazarus (GUI Pascal multiplataforma de código abierto) pero de uso general.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Código_128&oldid=1246604317"