European Article Number
De Wikipedia, la enciclopedia libre
European Article Number o International Article Number es un sistema de códigos de barras adoptado por más de 100 países y cerca de un millón de empresas (2003). En el año 2005, la asociación EAN se ha fusionado con la UCC (Uniform Code Council) para formar una nueva y única organización mundial identificada como GS1, con sede en Bélgica.
El código EAN más usual es EAN13, constituido por 13 dígitos y con una estructura dividida en cuatro partes:
- Los primeros dígitos del código de barras EAN identifican el país que otorgó el código, no el país de origen del producto. Por ejemplo, en Chile se encarga de ello una empresa responsable adscrita al sistema EAN y su código es el '780'.
- Composición del código:
- Código del país en donde radica la empresa, compuesto por 3 dígitos.
- Código de empresa. Es un número compuesto por 4 o 5 dígitos, que identifica al propietario de la marca. Es asignado por la asociación de fabricantes y distribuidores (AECOC).[1]
- Código de producto. Completa los 12 primeros dígitos.
- Dígito de control. Para comprobar el dígito de control (por ejemplo, inmediatamente después de leer un código de barras mediante un escáner), numeramos los dígitos de derecha a izquierda. A continuación se suman los dígitos de las posiciones impares, el resultado se multiplica por 3, y se le suman los dígitos de las posiciones pares. Se busca decena inmediatamente superior y se le resta el resultado obtenido. El resultado final es el dígito de control. Si el resultado es múltiplo de 10 el dígito de control será 0.
Por ejemplo, para 123456789041 el dígito de control será:
- Numeramos de derecha a izquierda: 140987654321
- Suma de los números en los lugares impares: 1+0+8+6+4+2 = 21
- Multiplicado (por 3): 21 × 3 = 63
- Suma de los números en los lugares pares: 4+9+7+5+3+1 = 29
- Suma total: 63 + 29 = 92
- Decena inmediatamente superior = 100
- Dígito de control: 100 - 92 = 8
El código quedará así: 1234567890418.
Índice
Algoritmo informático[editar]
Perl[editar]
# Cálculo del dígito de control EAN my $ean = '123456789041'; # Valor de prueba my $checksum = 1000; my $i = 0; for my $digit (split //, reverse $ean) { # Recorremos el $ean de forma inversa, dígito por dígito $checksum # Modificamos $checksum -= $i++ % 2 # según la posición del dígito: ? $digit # posición impar : $digit*3 # posición par ; } $checksum %= 10; # Ajustamos a la decena inmediatamente inferior print "Dígito de control: $checksum\n"; print "Código EAN: $ean$checksum\n";
PHP[editar]
// Cálculo del dígito de control EAN function ean13_checksum ($message) { $checksum = 0; foreach (str_split(strrev($message)) as $pos => $val) { $checksum += $val * (3 - 2 * ($pos % 2)); } return ((10 - ($checksum % 10)) % 10); } // Valor de prueba (sin dígito de control) $ean = '931804231236'; echo 'Digito de control: ', ean13_checksum($ean);
C#[editar]
// Cálculo del dígito de control EAN int iSum = 0; int iSumInpar = 0; int iDigit = 0; string EAN = "123456789041"; // 12 digitos unicamente EAN=EAN.PadLeft(13,'0'); for (int i = EAN.Length; i >= 1; i--) { iDigit = Convert.ToInt32(EAN.Substring(i - 1, 1)); if (i % 2 != 0) { iSumInpar += iDigit; } else { iSum += iDigit; } } iDigit = (iSumInpar*3) + iSum ; int iCheckSum = (10 - (iDigit % 10)) % 10; Console.Write("Digito de control: " + iCheckSum.ToString());
Python[editar]
EAN = "123456789041" def eanCheck(ean): checksum = 0 for i, digit in enumerate(reversed(ean)): checksum += int(digit) * 3 if (i % 2 == 0) else int(digit) return (10 - (checksum % 10)) % 10 print "Digito de control: %d" %eanCheck(EAN)
Visual Basic 6.0[editar]
'Cálculo del dígito de control EAN Dim iSum As Integer Dim iDigit As Integer Dim EAN As String Dim i As Integer iSum = 0 iDigit = 0 EAN = Text1.Text 'EAN de prueba For i = Len(EAN) To 1 Step -1 iDigit = (Mid(EAN, i, 1)) If (Len(EAN) - i + 1) Mod 2 <> 0 Then iSum = iSum + iDigit * 3 Else iSum = iSum + iDigit End If Next Dim iCheckSum As Integer iCheckSum = (10 - (iSum Mod 10)) Mod 10 Text2.Text = iCheckSum Text3.Text = Text1.Text & Text2.Text & "0000000000000"
JAVASCRIPT[editar]
// Cálculo del dígito de control EAN function ean13_checksum(message) { var checksum = 0; message = message.split('').reverse(); for(var pos in message){ checksum += message[pos] * (3 - 2 * (pos % 2)); } return ((10 - (checksum % 10 )) % 10); } // Valor de prueba (sin dígito de control) var ean = '123456789041'; console.log(ean13_checksum(ean));
ABAP[editar]
CALL FUNCTION 'MARA_EAN11'
EXPORTING
P_MATNR = MARA-MATNR
P_NUMTP = MARA-NUMTP
P_EAN11 = MARA-EAN11
P_MEINH = MARA-MEINS
RET_EAN11 = LMARA-EAN11
RET_NUMTP = LMARA-NUMTP
BINPT_IN = SY-BINPT
P_MESSAGE = ' '
ERROR_FLAG = EAN_FEHLERFLG
P_HERKUNFT = 'A' " Für Abmessungen / EAN
GDS_RELEVANT = MARA-GDS_RELEVANT
IMPORTING
P_NUMTP = MARA-NUMTP
P_EAN11 = MARA-EAN11
VB_FLAG_MEAN = RMMG2-VB_MEAN
MSGID = MSGID " s. weiter unten
MSGTY = MSGTY
MSGNO = MSGNO
MSGV1 = MSGV1
MSGV2 = MSGV2
MSGV3 = MSGV3
MSGV4 = MSGV4
TABLES
MARM_EAN = MARM_EAN
MEAN_ME_TAB = MEAN_ME_TAB " NEU: AHE 24.10.95
ME_TAB = ME_TAB
YDMEAN = YDMEAN
EXCEPTIONS
EAN_ERROR = 1
OTHERS = 2....
Delphi[editar]
// Cálculo del dígito de control EAN function cc_CalcDV_Ean(Ean: String): Integer; { Calcula y devuelve el dígito verificador de una cadena de código EAN13 o EAN8 Devcuelve -1 en caso de ser incorrecto. } var SP, SI, I, L:Integer; Impar: Boolean; begin L:= Length(Ean); if (L=8) or (L=13) then begin SI:= 0; SP:= 0; I:= L-1; Impar:= Odd(L); repeat // Bucle para sumar los valores discriminando posiciones pares e impares if Impar then SI:= SI + StrToInt(Ean[I]) else SP:= SP + StrToInt(Ean[I]); Impar:= not Impar; I:= I - 1; until I =0; if Impar then SI:= SI*3 else SP:= SP*3; // Multiplica por tres según la longitud del código Result:= 10-(SI+SP) mod 10; // Calcula el dígito de verificación end else Result:= -1; end;
Referencias[editar]
Véase también[editar]
- Código de barras
- Tienda de autoservicio
- GS1-128 (antes Ean-128)