Empieza ahora y consigue 50% descuento durante 3 meses

!
!

¿Hablamos? +34 91 710 06 34

Sobre nosotros

Saltar al contenido principal
¿En qué podemos ayudarte?

Search for answers or browse our knowledge base.

Documentation | Demos | Support

Imprimir

Cómo generar códigos de barras EAN13 en Crystal Report

Mediante Crystal Report es posible generar códigos de barras EAN13, aunque para ellos es necesario realizar los siguientes pasos:


1. Descargar e instalar la fuente ean13.ttf en servidor y los equipos desde donde se vayan a imprimir los códigos de barras.

2. En el taller de fórmulas de Crystal Report se debe crear una función personalizada (por ejemplo Generar_EAN13):  


3. En la función deberemos copiar el código de las funciones de Crystal Report.

4. Posteriormente crearemos una fórmula (por ejemplo CodigoBarras) que haga referencia a la función creada, donde le pasaremos como parámetro un campo o una cadena que contenga el código EAN13 y dicha fórmula devolverá una expresión que generará el código de barras:  


5. Por último, diseñaremos el informe insertando la fórmula en la posición que deseemos y estableciéndole la fuente Code EAN13.  


Funciones de Crystal Report

Function Generar_EAN13(Codigo As String) As String

    ' Esta función permite generar el código de barras para mostrarlo con la fuente EAN13.TTF
    ' - Parametros : código de 12 o 13 dígitos
    ' - Retorno: retorna una cadena que permite representar generar el código de barras con la fuente EAN13.TTF
    '            retorna una cadena vacía si no se puede representar el código de barras

    dim i,  first, checksum as number
    dim code, code13 as string
    dim tableA as boolean

    ' Evaluar los dígitos del código
    If Len(Codigo) = 12 then
        code = Codigo
    ElseIf Len(Codigo) = 13 then
        code = Left(Codigo,12)
    Else
        code = ""
    end If
  
    ' Verificar los dígitos del código
    For i = 1 To LEN(code)
        If Asc(Mid(code, i, 1)) < 48 Or Asc(Mid(code, i, 1)) > 57 Then
            code = ""
            Exit For
        End If
    Next

    ' Chequea los 12 dígitos y cálcula el digito de control
    If Len(code) = 12 Then
        For i = 12 To 1 Step -2
            checksum = checksum + Val(Mid(code, i, 1))
        Next
        checksum = checksum * 3
        For i = 11 To 1 Step -2
            checksum = checksum + Val(Mid(code, i, 1))
        Next
        code = code & ToText((10 - checksum Mod 10) Mod 10,0)

        ' Si el código inicial tenía 13 dígitos comprueba si el nuevo código generado
        ' es igual y en caso contrario no se generar ningún código
        If Len(Codigo)=13 and Codigo<>code then
            code = ""
        end If
    End If

    ' Chequea los 13 dígitos
    If Len(code) = 13 Then
        ' Los primeros 2 dígitos que suelen corresponder al código del país
        code13 = Left(code, 1) & Chr(65 + Val(Mid(code, 2, 1)))
        first = Val(Left(code, 1))

        ' Generar los códigos del primer bloque de dígitos
        For i = 3 To 7
            tableA = False
            Select Case i
                Case 3
                    Select Case first
                        Case 0 To 3
                            tableA = True
                    End Select
                Case 4
                    Select Case first
                        Case 0, 4, 7, 8
                            tableA = True
                    End Select
                Case 5
                    Select Case first
                        Case 0, 1, 4, 5, 9                 
                            tableA = True
                    End Select
                Case 6
                    Select Case first
                        Case 0, 2, 5, 6, 7
                            tableA = True
                    End Select
                Case 7
                    Select Case first
                        Case 0, 3, 6, 8, 9
                            tableA = True
                    End Select
            End Select
            If tableA Then
                code13 = code13 & Chr(65 + Val(Mid(code, i, 1)))
            Else
                code13 = code13 & Chr(75 + Val(Mid(code, i, 1)))
            End If
        Next

        ' Añadir el separador de los bloques
        code13 = code13 & "*"

        ' Generar los códigos del segundo bloque de dígitos
        For i = 8 To 13
            code13 = code13 & Chr(97 + Val(Mid(code, i, 1)))
        Next

        ' Añadir la marca final
        code13 = code13 & "+"
    End If

    Generar_EAN13=code13

End Function

Nota: si se utiliza otro nombre de función entonces es necesario cambiarlo en todo el código fuente.

Tabla de contenidos