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 descargar o copiar el siguiente código fuente:
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.
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.