Cómo obtener el Dígito de Control de un código de barras EAN13
Por Enrique Martínez Montejo
[Microsoft Most Valuable Professional - Visual Basic]
Última revisión: 07/05/2006
 

El EAN 13 es el código básico adecuado para identificar unidades de producto cuyo destino ses un punto de venta, así como identificar artículos con el fin de poder incluir dicho código en documentos: albaranes, facturas, etc.

Un código EAN 13 se compone de cuatro partes:

PREFIJO CÓDIGO DE EMPRESA CÓDIGO DE PRODUCTO DÍGITO DE CONTROL

84

12345 67890 5

En el ejemplo, el prefijo corresponde a España (84), que es el código que EAN Internacional ha asignado a la Asociación Española de Codificación Comercial (AECOC), por lo que todas las empresas que forman parte del sistema EAN a través de la AECOC, necesitarán codificar sus artículos con el prefijo 84.

El código de empresa estará formado por el prefijo y un número de entre 5 y 8 dígitos, que la AECOC asignará a las empresas que se encuentren registradas, y representa al propietario de la marca del producto.

El código de producto lo asigna directamente el propietario de la marca, mediante una serie de dígitos que le han sido previamente asignados en función del código de empresa que tenga.

Por último, se encuentra el dígito de control, que junto con los restantes dígitos, componen el código EAN 13 completo, y es el encargado de validar al número completo. Y esto es precisamente lo que calcula la función GetCDBarCodEAN13 que presento en esta página: el dígito de control de un código de barras, en el formato básico EAN 13.

La función acepta como parámetro una cadena numérica, cuya longitud deberá ser de 12 caracteres, devolviendo el dígito de control correspondiente. Al pasar el argumento por referencia, la función modifica el valor del argumento pasado, incorporando el dígito de control al número, por lo que podrá consultar el número completo, leyendo el valor de la variable que haya utilizado para pasársela a la función.

Por último, la función devolverá una excepción del tipo System.ArgumentException, en el supuesto de que se haya pasado a la función un argumento no válido, por lo que mi consejo es que incluya la llamada en un bloque Try ... End Try, o verifique primeramente la longitud de la cadena numérica.

Public Function GetDCBarCodEAN13(ByRef number As String) As Integer

    '*******************************************************************
    ' Nombre:     GetDCBarCodEAN13
    '             por Enrique Martínez Montejo - 07/05/2006
    '
    ' Versión:    1.0
    '
    ' Finalidad:  Calcular el dígito de control de un código de
    '             barras en formato EAN13.
    '
    ' Entradas:
    '    number:  String. El número cuyo digíto de control se desea
    '             obtener.
    ' Resultados:
    '    Integer: El dígito de control del número. En el parámetro de
    '             la función se devolverá el número completo.
    '*******************************************************************

    ' Si el número no cumple con el formato EAN13, la función
    ' devolverá una excepción de argumentos no válidos.
    ' Para ello, la cadena deberá tener 12 caracteres de
    ' longitud, y contener sólo números.
    '
 
  If (number.Length <> 12) Then
        number = ""
        Throw New System.ArgumentException
    Else
        Dim ch As Char
        For Each ch In number
            If (Not Char.IsNumber(ch)) Then
                number = ""
                Throw New System.ArgumentException
            End If
        Next
    End If

    Dim x, digito, sumaCod As Integer

    ' Extraigo el valor del dígito, y voy
    ' sumando los valores resultantes.
    '

    For x = 11 To 0 Step -1

        digito = CInt(number.Substring(x, 1))

        Select Case x
            Case 1, 3, 5, 7, 9, 11
                ' Las posiciones impares se multiplican por 3
                sumaCod += (digito * 3)

            Case Else
                ' Las posiciones pares se multiplican por 1
                sumaCod += (digito * 1)
        End Select

    Next

    ' Calculo la decena superior
    '

    digito = (sumaCod Mod 10)

    ' Calculo el dígito de control
    '

    digito = 10 - digito

    ' Código de barras completo
    '

    number &= CStr(digito)

    ' Devuelvo el dígito de control
    '

    Return digito

End Function

 

Cómo obtener el Dígito de Control de un código de barras EAN13

 

Otros enlaces de interés:

Cómo validar un número de código de barras en formato EAN13

Indice de la Biblioteca de Funciones de Códigos de Control


Enrique Martínez Montejo - 2006

NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.

NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.