# Código Universal de Producto

El Código Universal de Producto (UPC) es una simbología de código de barras que se utiliza ampliamente en los Estados Unidos, Canadá, Reino Unido, Australia, Nueva Zelanda, Europa y otros países para rastrear artículos comerciales en las tiendas.
UPC (técnicamente se refiere a UPC-A) consta de 12 dígitos numéricos, que se asignan de forma única a cada artículo comercial. Junto con el código de barras EAN relacionado, el UPC es el código de barras utilizado principalmente para el escaneo de artículos comerciales en el punto de venta, según las especificaciones GS1. Las estructuras de datos de la UPC son un componente de los GTIN y siguen la especificación GS1 global, que se basa en estándares internacionales. Pero algunos minoristas (ropa, muebles) no usan el sistema GS1 (más bien otras simbologías de códigos de barras o sistemas de números de artículos). Por otro lado, algunos minoristas utilizan la simbología de códigos de barras EAN / UPC, pero sin utilizar un GTIN (solo para productos vendidos en sus propias tiendas).

## Historia

Wallace Flint propuso un sistema de pago automatizado en 1932 utilizando tarjetas perforadas. Bernard Silver y Norman Joseph Woodland, un estudiante graduado del Instituto de Tecnología Drexel (ahora Universidad de Drexel), desarrollaron un código de estilo bull's-eye (de ojo de buey) y solicitaron la patente en 1949.
En la década de 1960, los ferrocarriles experimentaron con un código de barras multicolor para rastrear vagones, pero finalmente lo abandonaron.
Un grupo de asociaciones comerciales de la industria de comestibles formó el Consejo Uniforme de Código de Productos de Comestibles que, junto con los consultores Larry Russell y Tom Wilson de McKinsey & Company, definieron el formato numérico del Código Uniforme de Productos. Las empresas de tecnología como Charegon, IBM, Litton-Zellweger, Pitney Bowes-Alpex, Plessey-Anker, RCA, Scanner Inc., Singer, y Dymo Industries/Data General propusieron representaciones alternativas de símbolos para el consejo. Al final, el Comité de selección de símbolos eligió modificar ligeramente, cambiando la fuente en el área legible por humanos, la propuesta de IBM diseñada por George J. Laurer.
El primer artículo marcado UPC que se escaneó en una venta minorista fue en el supermercado Marsh en Troy, Ohio, a las 8:01 a. m. del 26 de junio de 1974, y era un paquete de 10 (50 cartuchos) de chicle Wrigley's Juicy Fruit. El comprador fue Clyde Dawson y la cajera Sharon Buchanan realizó el primer escaneo UPC. La caja registradora de NCR registró un aumento de 67 centavos. Todo el carro de la compra también tenía artículos con código de barras, pero el chicle fue el primero recogido. Este artículo se exhibió en el Museo Nacional de Historia Estadounidense del Instituto Smithsoniano en Washington D. C..

### Propuesta de IBM y desarrollo del código

Hacia fines de 1969, IBM en Research Triangle Park (RTP) en Carolina del Norte asignó a George Laurer la tarea de determinar cómo hacer un escáner y una etiqueta de supermercado. A fines de 1970, Heard Baumeister proporcionó ecuaciones para calcular los caracteres por pulgada que se pueden obtener mediante dos códigos de barra de IBM, Delta A y Delta B. En febrero de 1971, Baumeister se unió a Laurer.
A mediados de 1971, William "Bill" Crouse inventó un nuevo código de barras llamado Delta C. Logró cuatro veces los caracteres por pulgada que Delta B. Delta B comparó los anchos de barra con el ancho del espacio para codificar los bits. Esto era extremadamente sensible a la extensión de la tinta donde demasiada tinta o presión causarían que ambos bordes de una barra se extendieran hacia afuera y demasiado poco para hacer que se encogieran. Para empeorar las cosas, los espacios de barras se reducen y viceversa. Delta C logró su mayor rendimiento al usar únicamente bordes de entrada o de salida a finales que no se vieron afectados por la dispersión de tinta uniforme. El código proporcionaba el mejor rendimiento cuando tenía un juego de caracteres definido con una distancia de referencia fija que abarcaba la mayoría o preferiblemente todo el carácter. En agosto de 1971, Crouse se unió al esfuerzo del escáner. Después de varios meses, no progresaron. Estaban al tanto de la etiqueta de ojo de buey de RCA que se podía escanear con un escáner láser de línea recta simple, pero una etiqueta legible era demasiado grande. Aunque Litton Industries propuso un símbolo de ojo de buey cortado a la mitad para reducir el área, seguía siendo demasiado grande y presentaba los mismos problemas de impresión de tinta que el símbolo RCA. La redundancia y la capacidad de comprobación se eliminaron por completo. También conocían las numerosas propuestas de todo el mundo, ninguna de las cuales era factible.
En la primavera de 1972, Baumeister anunció un gran avance. Propuso una etiqueta con barras que eran un poco más largas que la distancia en todas las barras que necesitaban leerse en una sola pasada. Esta etiqueta se puede escanear con un simple escáner "X", solo un poco más complejo que el escáner láser de línea recta. Al día siguiente, Baumeister sugirió que si la etiqueta se dividía en dos mitades, la longitud de las barras podría reducirse casi a la mitad. Estas dos propuestas redujeron el área del ojo de buey en un tercio y luego en un sexto. La imagen a la derecha muestra la etiqueta propuesta por Baumeister. Él no especificó ningún código de barras específico, ya que eso se entendía bien. Excepto por la codificación de barras y los diez dígitos, la etiqueta de UPC hoy es su propuesta. Poco después, Baumeister se transfirió a otra área de RTP.
Laurer procedió a definir los detalles de la etiqueta y a escribir una propuesta. N.J. Woodland fue asignado como planificador para el proyecto y ayudó a Laurer a escribir su propuesta.
El primer intento de Laurer con un código de barras usó Delta B. El tamaño resultante de la etiqueta era aproximadamente seis pulgadas por tres pulgadas, que era demasiado grande. Crouse sugirió que Laurer usara su código de barras Delta C y proporcionó una copia de su patente que tenía un conjunto de caracteres alfanuméricos de muestra y reglas para generar alfabetos de otros tamaños. Esto redujo el tamaño de la etiqueta a aproximadamente 1.5 "x 0.9". Más tarde, Laurer le pidió ayuda a Crouse sobre cómo el escáner podría detectar una etiqueta. Juntos definieron barras de protección y una definición de cómo detectar la etiqueta. Las barras de protección también proporcionaron identificación para la mitad de la discriminación de etiquetas y barras de entrenamiento para los circuitos de umbral del escáner. Laurer tenía una definición de etiqueta completa y procedió a escribir su propuesta.
Anteriormente, Crouse tenía una idea para una varita simple que se usaba como un anillo y una pulsera. Decidió desarrollar esa varita para proporcionar una demostración de la etiqueta.
El 1 de diciembre de 1972, IBM presentó la propuesta de Laurer al Comité de Supermercados en Rochester, Minnesota, la ubicación donde IBM desarrollaría el escáner. Durante la presentación, Crouse realizó una demostración de laboratorio en la que leyó etiquetas tipo UPC con su varita mágica. Además de leer las etiquetas regulares, leyó la etiqueta grande de dos páginas en el folleto de la propuesta. Luego pasó a una página que muestra una foto de artículos etiquetados que se sientan en una mesa. Las etiquetas eran pequeñas y defectuosas debido a la resolución de la foto impresa, pero la varita leyó muchas de ellas. Esta demostración mostró la solidez del código Delta C puro. La propuesta fue aceptada.
Un mes después, el 1 de enero de 1973, Crouse se transfirió nuevamente al grupo de Tecnología Avanzada de IBM, y Laurer se quedó con la plena responsabilidad de la etiqueta.
Dymo Industries, fabricantes de dispositivos de impresión de mano, insistió en que el código debe ser independiente del carácter, de modo que los dispositivos de impresión portátiles puedan producir el código de barras en la tienda si los artículos no tienen códigos de barras por parte de los fabricantes. La propuesta de Dymo fue aceptada por IBM e incorporada en la última propuesta de IBM.
Se decidió que las dos mitades de la etiqueta deberían tener un conjunto diferente de caracteres numéricos. El conjunto de caracteres Laurer derivado de la patente Delta C utilizó siete incrementos o unidades imprimibles en los que se imprimirían dos barras y dos espacios. Esto produjo veinte combinaciones de caracteres, pero hubo dos pares que, cuando fueron leídos por las reglas de Delta C, arrojaron el mismo código para el par. Como dieciocho caracteres no eran suficientes, Laurer intentó agregar una unidad al juego de caracteres. Esto produjo veintiséis caracteres de Delta C que podrían proporcionar los dos conjuntos de caracteres decimales pero también agregó catorce por ciento del ancho de la etiqueta y, por lo tanto, la altura. Esto sería un aumento del treinta por ciento en el área o una etiqueta de 1.7 "x1.03". Laurer sintió que esto no era aceptable. Volvió al juego de caracteres original con veinte caracteres, pero cuatro de ellos eran dos pares con la misma lectura de Delta C. Él decidió usarlos a todos. Para distinguir entre los pares, mediría un ancho de barra en cada uno de los pares para distinguirlos entre sí. Para cada par, esas barras tendrían una o dos unidades de ancho. Laurer no aplicó las ecuaciones de Baumeister a este conjunto. Sintió que solo una medición de ancho de barra no sería demasiado seria. Resultó que habría requerido más del cincuenta por ciento de aumento en ancho y alto para un aumento de área de más del doble. Laurer más tarde admitió que estos cuatro personajes en cada conjunto eran responsables de la mayoría de los errores de lectura del escáner.
A David Savir, un matemático, se le dio la tarea de probar que el símbolo podía imprimirse y que cumpliría con los requisitos de confiabilidad, y muy probablemente no conocía las ecuaciones de Baumeister. Él y Laurer agregaron dos dígitos más a los diez para la corrección de errores y la detección. Luego decidieron agregar la paridad impar / par a la cantidad de unidades llenas de barras en cada lado. La paridad impar / par es una técnica utilizada para detectar cualquier cantidad impar de errores de bit en un flujo de bits. Decidieron usar impar en una mitad e incluso en la otra. Esto proporcionaría una indicación adicional de qué medio ticket se estaba leyendo. Esto significaba que cada ancho de barra debía leerse con precisión para proporcionar una buena lectura. También significaba que cada espacio también sería conocido. Exigir que se lea el ancho de todos los bits, básicamente anuló la ventaja de Delta C, excepto para la medición de referencia Delta C. Solo el extraño conjunto de caracteres y el tamaño de la etiqueta permanecen como una sombra del código Delta C. El tamaño todavía era el calculado para Delta C puro. Si el tamaño de la etiqueta se hubiera recalculado correctamente, teniendo en cuenta las medidas de ancho de barra requeridas, la etiqueta habría sido demasiado grande para ser aceptable.
La ingeniería mecánica y el diseño de circuitos electrónicos comúnmente requieren diseños de peor caso con tolerancias conocidas. Muchos ingenieros que trabajan con códigos de barras tenían poca experiencia con tales cosas y usaban métodos algo intuitivos. Esta fue la causa del bajo rendimiento del código Delta B y muy probablemente el fallo del escáner de ojo de buey de RCA.
La siguiente tabla muestra las etiquetas viables, disponibles a principios de la década de 1970, con sus tamaños.
| Tipo de etiqueta | Dimensiones de etiqueta (pulgadas) | Área (pulgadas) |
| Ojo de buey con código Morse | Grande | Grande |
| Ojo de buey con Delta B | 12.0" diámetro | 113.10 sq. in. |
| Ojo de buey con Delta A | 9.0" diámetro | 63.62 sq. in. |
| Baumeister 1.º con Delta B | 6.0" × 5.8" | 34.80 sq. in. |
| Baumeister 2 mitades con Delta B | 6.0" × 3.0" | 18.00 sq. in. |
| Baumeister 2 mitades con Delta A | 4.5" × 2.3" | 10.35 sq. in. |
| Baumeister con Delta C | 1.5" × 0.9" | 1.35 sq. in. |
Esto es suponiendo un ojo de buey con la misma información y la legibilidad fiable.

## Composición

Cada código de barras UPC-A consiste en una franja escaneable de barras negras y espacios en blanco sobre una secuencia de 12 dígitos numéricos. No pueden aparecer letras, caracteres u otro contenido de ningún tipo en un código de barras UPC-A. Hay una correspondencia de uno a uno entre el número de 12 dígitos y la tira de barras negras y espacios en blanco, es decir, solo hay una forma de representar visualmente cada número de 12 dígitos y solo hay una forma de representar cada banda de barras negras y espacios en blanco numéricamente.
622/5000 El área escaneable de cada código de barras UPC-A sigue el patrón SLLLLLLMRRRRRRE, donde los patrones de protección S (inicio), M (medio) y E (extremo) se representan de la misma manera en cada código de barras UPC-A y en la izquierda (L) Las secciones R (derecha) representan colectivamente los 12 dígitos numéricos que hacen que cada UPC-A sea único. El primer dígito L indica un sistema numérico particular para ser utilizado por los siguientes dígitos. El último dígito R es un código de control de detección de errores que permite detectar algunos errores en el escaneo o la entrada manual. Los patrones de guardia separan los dos grupos de seis dígitos numéricos y establecen el tiempo.
| UPC-A | UPC-E |
Nota: UPC-A 042100005264 es equivalente a UPC-E 425261 con el patrón de paridad "EOEEOO", que se define mediante el sistema de número UPC-A 0 y el dígito de control 4 de UPC-A.

### Formateo

Los códigos de barras UPC-A se pueden imprimir en varias densidades para adaptarse a una variedad de procesos de impresión y escaneo. El parámetro dimensional significativo se denomina dimensión x (ancho del elemento de módulo individual). El ancho de cada barra (espacio) se determina multiplicando la dimensión xy el ancho del módulo (1, 2, 3 o 4 unidades) de cada barra (espacio). Dado que los patrones de protección incluyen dos barras, y cada uno de los 12 dígitos del código de barras UPC-A consta de dos barras y dos espacios, todos los códigos de barras de UPC-A consisten exactamente (3 × 2) + (12 × 2) = 30 barras, de las cuales 6 representan patrones de guardia y 24 representan dígitos numéricos.
La dimensión x para el UPC-A en el tamaño nominal es de 0,33 mm (0,013 "). La altura nominal del símbolo para UPC-A es de 25,9 mm (1,02"). Las barras que forman los patrones de protección S (inicio), M (medio) y E (extremo) se extienden hacia abajo 5 veces x dimensión, con una altura de símbolo nominal resultante de 27.55 mm (1.08 "). Esto también se aplica a las barras del primer y último dígito numérico del código de barras del UPC-A. UPC-A puede reducirse o magnificarse entre 80% y 200%.
Una zona silenciosa, con un ancho de al menos 9 veces la dimensión x, debe estar presente en cada lado del área escaneable del código de barras UPC-A. Para un número GTIN-12 codificado en un código de barras UPC-A, los primeros y últimos dígitos se colocan siempre fuera del símbolo para indicar las zonas silenciosas que son necesarias para que los escáneres de códigos de barras funcionen correctamente.

## Codificación

El código de barras UPC-A se representa visualmente mediante tiras de barras y espacios que codifican el número UPC de 12 dígitos. Cada dígito está representado por un patrón único de 2 barras y 2 espacios. Las barras y los espacios son de ancho variable, es decir, 1, 2, 3 o 4 módulos de ancho. El ancho total para un dígito es siempre 7 módulos; en consecuencia, el número UPC de 12 dígitos requiere un total de 7 × 12 = 84 módulos.
Un UPC-A completo tiene 95 módulos de ancho: 84 módulos para los dígitos (secciones L y R) combinados con 11 módulos para los patrones de protección S (inicio), M (medio) y E (final). Los patrones de protección S (inicio) y E (final) tienen 3 módulos de ancho y utilizan el patrón bar-barra-espacio, donde cada barra y espacio tiene un ancho de módulo. El patrón de guardia M (medio) tiene 5 módulos de ancho y utiliza el patrón espacio-barra-espacio-barra-espacio, donde cada barra y espacio también tiene un ancho de módulo. Además, un símbolo UPC-A requiere una zona silenciosa (espacio adicional de 9 módulos de ancho) antes de los patrones de protección S (inicio) y después de E (final).
Codificando mesa para UPC-Un barcode patrón SLLLLLLMRRRRRRE :
| Quietzone | S inicio | L dígito numérico izquierdo | L dígito numérico izquierdo | L dígito numérico izquierdo | L dígito numérico izquierdo | L dígito numérico izquierdo | L dígito numérico izquierdo | L dígito numérico izquierdo | L dígito numérico izquierdo | L dígito numérico izquierdo | L dígito numérico izquierdo | M medio | R dígito numérico derecho | R dígito numérico derecho | R dígito numérico derecho | R dígito numérico derecho | R dígito numérico derecho | R dígito numérico derecho | R dígito numérico derecho | R dígito numérico derecho | R dígito numérico derecho | R dígito numérico derecho | E fin | Quietzone |
| Quietzone | S inicio | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | M medio | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | E fin | Quietzone |
Los dígitos del lado izquierdo del UPC-A (los dígitos a la izquierda del patrón de protección M (medio)) tienen una paridad impar, lo que significa que el ancho total de las barras negras es un número impar de módulos. Por el contrario, los dígitos del lado derecho tienen paridad par. En consecuencia, un escáner UPC puede determinar si está escaneando un símbolo de izquierda a derecha o de derecha a izquierda (el símbolo está al revés). Después de ver un patrón de protección S (inicio) o E (final) (son lo mismo, barra-barra-espacio, cualquiera que sea la dirección en que se leen), el escáner verá primero dígitos impares de paridad, si está escaneando de izquierda a derecha, o incluso dígitos de paridad, si escanea de derecha a izquierda. Con la información de paridad / dirección, un símbolo al revés no confundirá al escáner. Cuando se enfrenta con un símbolo al revés, el escáner simplemente puede ignorarlo (muchos escáneres alternan escaneos de izquierda a derecha y de derecha a izquierda, por lo que leerán el símbolo en un pase posterior) o reconocer los dígitos y ponerlos en el orden correcto. Hay otra propiedad en la codificación de dígitos. Los dígitos del lado derecho son el inverso óptico de los dígitos del lado izquierdo, es decir, las barras negras se convierten en espacios en blanco y viceversa. Por ejemplo, el lado izquierdo "4" es el espacio × 1 - barra × 1 - espacio × 3 - barra × 2, mientras que el lado derecho "4" es barra × 1 - espacio × 1 - barra × 3 - espacio × 2.

## Numeración

La cantidad de códigos de barras UPC-A y UPC-E está limitada por los estándares utilizados para crearlos.
UPC-A: (10 valores posibles por dígito izquierdo ^ 6 dígitos de la izquierda) × (10 valores posibles por dígito derecho ^ 5 dígitos de la derecha) = 100,000,000,000.UPC-E: (10 valores posibles por dígito ^ 6 dígitos) × (2 posibles patrones de paridad por número UPC-E) = 2,000,000.

### Número del sistema numérico

A continuación se incluye una descripción de todos los sistemas de números posibles con el correspondiente esquema de numeración UPC-A de 12 dígitos LLLLLLRRRRRR, donde L indica el dígito del sistema numérico y el dígito de control R:

#### 0–1, 6–9

    Para la mayoría de los productos. Los dígitos LLLLL son el código del fabricante (asignado por la organización local GS1), y los dígitos RRRRR son el código del producto.

#### 2

    Reservado para uso local (tienda/almacén), para artículos vendidos por peso variable. A los artículos de peso variable, como carnes, frutas frescas o vegetales, se les asigna un número de artículo en la tienda, si están empacados allí. En este caso, el LLLLL es el número de artículo, y el RRRRR es el peso o el precio, y el primer R determina qué (0 para el peso).

#### 3

    Medicamentos según el Código Nacional de Fármacos (NDC). Los productos farmacéuticos en los EE. UU. Usan los 10 dígitos centrales de la UPC como su número NDC. Aunque generalmente solo se analizan medicamentos de venta libre en el punto de venta, los UPC basados en NDC se usan en paquetes de medicamentos recetados y productos quirúrgicos y, en este caso, comúnmente se los denomina códigos UPN.

#### 4

    Reservado para uso local (tienda / almacén), a menudo para tarjetas de fidelidad o cupones de tiendas.

#### 5

    Cupones. Los dígitos LLLLL son el código del fabricante, los primeros tres RRR son un código familiar (establecido por el fabricante), y los dos RR siguientes son un código de cupón, que determina el monto del descuento. Estos cupones se pueden duplicar o triplicar.

### Cálculo de Dígito Verificador

Si un código ingresado no satisface la ecuación, entonces no es un UPC-A válido.
El dígito de control UPC-A se puede calcular de la siguiente manera:
* Sume los dígitos en posiciones impares (primero, tercero, quinto, ..., undécimo).
* Multiplique el resultado por 3.
* Agregue la suma del dígito en las posiciones pares (segundo, cuarto, sexto, ..., décimo) al resultado.
* Encuentre el resultado módulo 10 (es decir, el resto, cuando se divide por 10) y llámelo M.
* Si M es cero, entonces el dígito de control es 0; en caso contrario el dígito de control es 10 − M.
Por ejemplo, en un código de barras UPC-A "03600029145x12", donde x12 es el dígito de control desconocido, x12 puede calcularse mediante:
* Sume los dígitos impares (0 + 6 + 0 + 2 + 1 + 5 = 14).
* Multiplique el resultado por 3 (14 × 3 = 42).
* Agregue los dígitos pares (42 + (3 + 0 + 0 + 9 + 4) = 58).
* Encuentre el resultado módulo 10 (58 mod 10 = 8 = M).
* Si M no es 0, reste M de 10 (10 − M = 10 − 8 = 2).
Por lo tanto, el dígito de verificación de x12 es 2.
La ecuación del dígito de verificación se selecciona para tener propiedades razonables de detección de errores (véase algoritmo de Luhn).
* UPC-A puede detectar el 100% de los errores de un solo dígito.
    Un error de un solo dígito significa que exactamente un dígito es incorrecto. Deje que la diferencia módulo 10 del dígito erróneo y el dígito correcto sea d. El valor de d no puede ser cero porque eso significa que los dígitos son los mismos, pero d puede ser cualquier otro valor en {1, 2, 3, 4, 5, 6, 7, 8, 9}. Si el dígito de error está en una posición impar (peso 1), el lado izquierdo de la ecuación del dígito de control cambia en d y la equivalencia ya no es cero. Si el dígito de error está en una posición par (peso 3), entonces el lado izquierdo cambia en 3d, pero ese cambio también es un módulo 10 distinto de cero, por lo que la ecuación del dígito de verificación no se cumple.
* UPC-A puede detectar aproximadamente el 89% de los errores de transposición. Específicamente, si y solo si la diferencia entre dos dígitos adyacentes es 5, el UPC-A no puede detectar su transposición.
** Si se transponen 2 dígitos contiguos, uno de los dígitos a será ponderado por 1, y el otro dígito b = a + d se ponderará por 3, donde d es la diferencia entre los dos dígitos. Si los dígitos estuvieran en su orden correcto, contribuirían
    al lado izquierdo de la ecuación del dígito de verificación. En el orden transpuesto, contribuyen
    al LHS. Restar las dos contribuciones da cuánto cambian el LHS:
    Se detectará un error siempre que el cambio modular sea distinto de cero; si 2d ≡ 0 módulo 10, entonces el cambio no será detectado. En consecuencia, solo cuando la diferencia de caracteres d ≡ 5 no se detecte un error (cuando d ≡ 0 la "transposición" degenerada no es un error).
** A continuación, considere con qué frecuencia una transposición tiene una distancia d de 5.
             Tabla de transposiciones d para códigos de barras UPC-A dN.º 0 1 2 3 4 5 6 7 8 9 1 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 2 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 3 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 4 3 3 3 4 3 5 3 6 3 7 3 8 3 9 5 4 4 4 5 4 6 4 7 4 8 4 9 6 5 5 5 6 5 7 5 8 5 9 7 6 6 6 7 6 8 6 9 8 7 7 7 8 7 9 9 8 8 8 9 10 9 9 Suma 10 18 16 14 12 10 8 6 4 2
             La suma de filas contiene el número de transposiciones d, por lo tanto, la proporción de errores de transposición no detectables es (ignorando las transposiciones donde d = 0):

## Variaciones

UPC en su uso más común técnicamente se refiere a UPC-A.
Existen otras variantes de la UPC:
* UPC-B es una versión de 12 dígitos de la UPC sin dígitos de control, desarrollada para el Código nacional de medicamentos (NDC) y el Código nacional de artículos relacionados con la salud. Tiene 11 dígitos más un código de producto de 1 dígito, y no es de uso común.
* UPC-C es un código de 12 dígitos con un código de producto y un dígito de control; no de uso común.
* UPC-D es un código de longitud variable (12 dígitos o más) con el dígito 12 como el dígito de verificación. Estas versiones no son de uso común.
* UPC-E es un código de 6 dígitos, que tiene su equivalente en UPC-A código de 12 dígitos con sistema numérico 0 o 1.
* UPC-2 es un suplemento de 2 dígitos de la UPC utilizado para indicar la edición de una revista o publicación periódica.
* UPC-5 es un suplemento de 5 dígitos del UPC que se utiliza para indicar el precio minorista sugerido para los libros.
A medida que la UPC se vuelve tecnológicamente obsoleta, se espera que UPC-B y UPC-C desaparezcan del uso común para la década de 2010. El estándar UPC-D puede modificarse en EAN 2.0 o eliminarse por completo.

### UPC-E

Para permitir el uso de códigos de barras UPC en paquetes más pequeños, donde un código de barras completo de 12 dígitos puede no ajustarse, se desarrolló una versión de UPC "suprimida por cero", llamada UPC-E, en la que el dígito del sistema numérico, todos los ceros finales en el código del fabricante y todos los ceros a la izquierda en el código del producto se suprimen (se omiten). Esta simbología difiere de UPC-A en que solo usa un código de 6 dígitos, no usa un patrón de guarda M (medio) y el patrón de guarda E (final) está formado como barra-espacio-barra-espacio-barra-espacio-barra-espacial , es decir, el código de barras UPC-E sigue el patrón SDDDDDDE. La forma en que un UPC-E de 6 dígitos se relaciona con un UPC-A de 12 dígitos se determina mediante el patrón numérico UPC-E y el patrón de paridad UPC-E. Solo puede corresponder al sistema numérico de UPC-A 0 o 1, cuyo valor, junto con el dígito de control UPC-A, determina el patrón de paridad UPC-E de la codificación. Con los dígitos del código del fabricante representados por X, y los dígitos del código del producto por N, entonces:
| Último dígito UPC-E | Patrón numérico UPC-E | UPC-A equivalente |
| 0 | XXNNN0 | 0 o 1 + XX000-00NNN + dígito de control |
| 1 | XXNNN1 | 0 o 1 + XX100-00NNN + dígito de control |
| 2 | XXNNN2 | 0 o 1 + XX200-00NNN + dígito de control |
| 3 | XXXNN3 | 0 o 1 + XXX00-000NN + dígito de control |
| 4 | XXXXN4 | 0 o 1 + XXXX0-0000N + dígito de control |
| 5 | XXXXX5 | 0 o 1 + XXXXX-00005 + dígito de control |
| 6 | XXXXX6 | 0 o 1 + XXXXX-00006 + dígito de control |
| 7 | XXXXX7 | 0 o 1 + XXXXX-00007 + dígito de control |
| 8 | XXXXX8 | 0 o 1 + XXXXX-00008 + dígito de control |
| 9 | XXXXX9 | 0 o 1 + XXXXX-00009 + dígito de control |
Por ejemplo, un UPC-E 654321 puede corresponder al UPC-A 065100004327 o 165100004324, dependiendo del patrón de paridad UPC-E de los dígitos codificados, como se describe a continuación:
| UPC-A dígito de control | Patrón de paridad UPC-E para UPC-A sistema numérico 0 | Patrón de paridad UPC-E para UPC-A sistema numérico 1 |
| 0 | EEEOOO | OOOEEE |
| 1 | EEOEOO | OOEOEE |
| 2 | EEOOEO | OOEEOE |
| 3 | EEOOOE | OOEEEO |
| 4 | EOEEOO | OEOOEE |
| 5 | EOOEEO | OEEOOE |
| 6 | EOOOEE | OEEEOO |
| 7 | EOEOEO | OEOEOE |
| 8 | EOEOOE | OEOEEO |
| 9 | EOOEOE | OEEOEO |
Codificando mesa para UPC-E barcode patrón SDDDDDDE :
| S(Inicio) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | O(Dígito de paridad extraña) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Incluso dígito de paridad) | E(Fin) |
| S(Inicio) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | E(Fin) |
| | 3-2-1-1 | 2-2-2-1 | 2-1-2-2 | 1-4-1-1 | 1-1-3-2 | 1-2-3-1 | 1-1-1-4 | 1-3-1-2 | 1-2-1-3 | 3-1-1-2 | 1-1-2-3 | 1-2-2-2 | 2-2-1-2 | 1-1-4-1 | 2-3-1-1 | 1-3-2-1 | 4-1-1-1 | 2-1-3-1 | 3-1-2-1 | 2-1-1-3 | |
UPC-E 654321 con patrón de paridad "EOEOEO" (UPC-A 065100004327) se codificaría como:
1-1-1 4-1-1-1 1-2-3-1 2-3-1-1 1-4-1-1 2-2-1-2 2-2-2-1 1-1-1-1-1-1.

### EAN-13

El EAN-13 fue desarrollado como un superconjunto de UPC-A, agregando un dígito extra al comienzo de cada número UPC-A. Esto amplió el número de valores únicos teóricamente posibles en diez veces a 1 billón. Los códigos de barras EAN-13 también indican el país en el que se basa la empresa que vende el producto (que puede ser o no igual que el país en el que se fabrica el bien). Los tres dígitos iniciales del código determinan esto, de acuerdo con los códigos de país GS1. Cada código UPC-A se puede convertir fácilmente al código EAN-13 equivalente al anteponer 0 dígitos al código UPC-A. Esto no cambia el dígito de control. Todos los sistemas de punto de venta ahora pueden entender ambos por igual
EAN-8 es una variación de 8 dígitos del código de barras EAN.
Notas de uso de UPC:
* Todos los productos, marcados con un EAN, serán aceptados actualmente en Norteamérica, además de los que ya están marcados con un UPC.
* El producto con un UPC existente no tiene que volver a marcarse con un EAN.
* En América del Norte, el EAN agrega un 30% más de códigos, principalmente al agregar los dígitos '10 a 12 'a los dígitos UPC '00 a 09'. Este es un poderoso incentivo para eliminar la UPC.