Capitulo 2: GTIN — Global Trade Item Number
Que es el GTIN
El GTIN (Global Trade Item Number) es el identificador unico global de productos. Es el numero que ves debajo de cualquier codigo de barras en un supermercado. Cada producto distinto (diferente tamano, sabor, presentacion) tiene su propio GTIN.
No es un numero aleatorio: tiene una estructura definida que incluye quien es el fabricante, cual es el producto y un digito de verificacion.
Tipos de GTIN
| Tipo | Digitos | Nombre anterior | Uso tipico |
|---|---|---|---|
| GTIN-8 | 8 | EAN-8 | Productos muy pequenos (chicles, lapices) |
| GTIN-12 | 12 | UPC-A | Mercado norteamericano |
| GTIN-13 | 13 | EAN-13 | Estandar mundial para productos de consumo |
| GTIN-14 | 14 | ITF-14, DUN-14 | Unidades logisticas (cajas, bultos) |
Todos los GTINs pueden normalizarse a 14 digitos rellenando con ceros a la izquierda. Un GTIN-13 9521234543213 se convierte en GTIN-14 como 09521234543213.
Estructura del GTIN-13
┌─────────────────────┬──────────────────┬─────────────┐
│ Prefijo empresa GS1 │ Ref. de producto │ Digito ctrl │
│ 7-10 digitos │ 2-5 digitos │ 1 digito │
└─────────────────────┴──────────────────┴─────────────┘
- Prefijo empresa GS1: asignado por la organizacion GS1 local al fabricante. Los primeros 3 digitos indican el pais de la organizacion que asigno el prefijo (no necesariamente el pais de fabricacion).
- Referencia de producto: asignado por el fabricante a cada producto.
- Digito de control: calculado con el algoritmo Modulo-10.
Ejemplos de prefijos por pais:
| Prefijo | Organizacion |
|---|---|
| 750 | GS1 Mexico |
| 779 | GS1 Argentina |
| 840-849 | GS1 Espana |
| 00-13 | GS1 USA |
Calculo del digito de control (Modulo-10)
El algoritmo es el mismo para todos los tipos de GTIN. Vamos a calcularlo paso a paso para el GTIN-13 952123454321? donde ? es el digito que queremos encontrar.
Paso 1: Tomar los primeros 12 digitos
Posicion: 1 2 3 4 5 6 7 8 9 10 11 12
Digito: 9 5 2 1 2 3 4 5 4 3 2 1
Paso 2: Asignar pesos alternando x1 y x3 desde la izquierda
Posicion: 1 2 3 4 5 6 7 8 9 10 11 12
Digito: 9 5 2 1 2 3 4 5 4 3 2 1
Peso: 1 3 1 3 1 3 1 3 1 3 1 3
Paso 3: Multiplicar cada digito por su peso
9x1 5x3 2x1 1x3 2x1 3x3 4x1 5x3 4x1 3x3 2x1 1x3
9 15 2 3 2 9 4 15 4 9 2 3
Paso 4: Sumar todos los resultados
9 + 15 + 2 + 3 + 2 + 9 + 4 + 15 + 4 + 9 + 2 + 3 = 77
Paso 5: Calcular el digito de control
Siguiente multiplo de 10: 80
Digito de control = 80 - 77 = 3
GTIN-13 completo: 9521234543213
GTIN-14 para items logisticos
El GTIN-14 se forma agregando un indicador de empaque (1 digito) al inicio de un GTIN-13 (sin su digito de control original) y recalculando el digito de control.
| Indicador | Significado |
|---|---|
| 0 | Unidad de consumo (equivale al GTIN-13) |
| 1-8 | Diferentes niveles de empaque (caja de 6, caja de 12, pallet…) |
| 9 | Cantidad variable (peso, longitud) |
Ejemplo: si el GTIN-13 de una botella es 9521234543213, una caja de 12 botellas podria ser:
Indicador: 1
GTIN-14: 1 952123454321 [nuevo digito de control]
Codigo: calcular el digito de control
function calcularDigitoControl(digits: string): number {
const nums = digits.split('').map(Number);
const targetLength = nums.length + 1; // longitud final con digito de control
const sum = nums.reduce((acc, digit, i) => {
// Para GTIN, las posiciones pares (desde la derecha) llevan peso 1
// las impares llevan peso 3
const weight = (targetLength - i) % 2 === 0 ? 1 : 3;
return acc + digit * weight;
}, 0);
return (10 - (sum % 10)) % 10;
}
// Ejemplos de uso
console.log(calcularDigitoControl('952123454321')); // 3 (GTIN-13)
console.log(calcularDigitoControl('0952123454321')); // 0 (GTIN-14)
console.log(calcularDigitoControl('401234567890')); // 3 (GTIN-13)
Validar un GTIN completo
function validarGTIN(gtin: string): boolean {
if (!/^\d+$/.test(gtin)) return false;
if (![8, 12, 13, 14].includes(gtin.length)) return false;
const sinControl = gtin.slice(0, -1);
const controlEsperado = calcularDigitoControl(sinControl);
const controlActual = Number(gtin.at(-1));
return controlEsperado === controlActual;
}
console.log(validarGTIN('9521234543213')); // true
console.log(validarGTIN('9521234543210')); // false
El GTIN identifica que es un producto. En el proximo capitulo veremos como identificar donde estan las cosas (GLN) y como se mueven (SSCC).