Ver Mensaje Individual
  #7
Antiguo 21 de septiembre de 2018, 19:23
Gusaiello
Forero Activo
Concurso: Segundo puesto: Ganador/a del Segundo puesto en un concurso - Issue reason: Generador de código QR encriptado Activista del Foro: Activista del Foro - Issue reason: Por aportar ejecrcicios para los novatos 
Última Actividad 17.09.2026 14:29
Posts Posts: 236
Likes enviados Enviados: 150
Likes recibidos Recibidos: 139

Yo creo que la diferencia que ves entre lo que aparece en pantalla y la etiqueta es por que el código EAN-13 no es solo cambiar de fuente, es una conversón de cada uno de los dígitos en función de unas tablas.

Eso funciona con el código 3 de 9, al cual solo hay que agregarle las mascas de inicio y fin que generalmente son asteriscos.

En el caso del EAN-13 las cosas son diferentes, por ejemplo el número 1234567890128 hay que convertirlo (mediante las tablas anteriormente mencionadas) en : 1CDOFQR*ijabci+

Esto es independiente del tamaño del campo, es decir que no importa si tu campo es de mas de 13 dígitos.

Estas son las tablas que vas a necesitar
Código COBOL:
  1.      ******************************************************************
  2.      *            TABLAS PARA EL CODIGO DE BARRAS EAN-13              *
  3.  
  4.        77  CODIGO-AUX           PIC X(13).
  5.        01  DIGITOS REDEFINES CODIGO-AUX.
  6.            03 DIGITO-1          PIC 9(1).
  7.            03 DIGITO-2          PIC 9(1).
  8.            03 DIGITO-3          PIC 9(1).
  9.            03 DIGITO-4          PIC 9(1).
  10.            03 DIGITO-5          PIC 9(1).
  11.            03 DIGITO-6          PIC 9(1).
  12.            03 DIGITO-7          PIC 9(1).
  13.            03 DIGITO-8          PIC 9(1).
  14.            03 DIGITO-9          PIC 9(1).
  15.            03 DIGITO-10         PIC 9(1).
  16.            03 DIGITO-11         PIC 9(1).
  17.            03 DIGITO-12         PIC 9(1).
  18.            03 DIGITO-13         PIC 9(1).
  19.  
  20.        77  PUNTERO-DE-TABLA-DE-VALORES PIC 99.
  21.        77  PUNTERO-STRING       PIC 9(2).
  22.  
  23.        77  EAN-13-X             PIC X(15).
  24.  
  25.        01  DATOS-TABLA-DE-TABLAS.
  26.            03 CERO         PIC X(6) VALUE "111111".
  27.            03 UNO          PIC X(6) VALUE "112122".
  28.            03 DOS          PIC X(6) VALUE "112212".
  29.            03 TRES         PIC X(6) VALUE "112221".
  30.            03 CUATRO       PIC X(6) VALUE "121122".
  31.            03 CINCO        PIC X(6) VALUE "122112".
  32.            03 SEIS         PIC X(6) VALUE "122211".
  33.            03 SIETE        PIC X(6) VALUE "121212".
  34.            03 OCHO         PIC X(6) VALUE "121221".
  35.            03 NUEVE        PIC X(6) VALUE "122121".
  36.  
  37.       *  Tabla para determinar el set de datos a utilizar.
  38.        01  TABLA-DE-TABLAS REDEFINES DATOS-TABLA-DE-TABLAS.
  39.            02              OCCURS 9.
  40.               03 TABLA     PIC 9(1) OCCURS 6.
  41.  
  42.       *                                    12345
  43.        01  DATOS-TABLAS-DE-VALORES.
  44.            03              PIC X(5) VALUE "AKa0K".
  45.            03              PIC X(5) VALUE "BLb1l".
  46.            03              PIC X(5) VALUE "CMc2m".
  47.            03              PIC X(5) VALUE "DNd3n".
  48.            03              PIC X(5) VALUE "EOe4o".
  49.            03              PIC X(5) VALUE "FPf5p".
  50.            03              PIC X(5) VALUE "GQg6q".
  51.            03              PIC X(5) VALUE "HRh7r".
  52.            03              PIC X(5) VALUE "ISi8s".
  53.            03              PIC X(5) VALUE "JTj9t".
  54.  
  55.        01  TABLA-DE-VALORES REDEFINES DATOS-TABLAS-DE-VALORES.
  56.            02 VALOR        OCCURS 9.
  57.               03 CARACTER  PIC X(1) OCCURS 5.
  58.  
  59.        77  COLUMNA-VALORES PIC 9.
  60.        77  FILA-VALORES    PIC 99.
  61.      *                                                                *
  62.      ******************************************************************


Y esta es la rutina

Código COBOL:
  1.      ******************************************************************
  2.        GENERO-EAN-13.
  3.            INITIALIZE EAN-13-X.
  4.            MOVE CODBA-ARTI TO CODIGO-AUX.
  5.            MOVE DIGITO-1   TO EAN-13-X.
  6.  
  7.            MOVE DIGITO-1  TO PUNTERO-DE-TABLA-DE-VALORES.
  8.            ADD  1         TO PUNTERO-DE-TABLA-DE-VALORES.
  9.  
  10.       *    2° DIGITO.
  11.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 1) TO COLUMNA-VALORES
  12.            ADD  1 TO DIGITO-2 GIVING FILA-VALORES.
  13.            MOVE 2 TO PUNTERO-STRING.
  14.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  15.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  16.  
  17.       *    3° DIGITO.
  18.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 2) TO COLUMNA-VALORES
  19.            ADD  1 TO DIGITO-3 GIVING FILA-VALORES.
  20.            MOVE 3 TO PUNTERO-STRING.
  21.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  22.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  23.  
  24.       *    4° DIGITO.
  25.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 3) TO COLUMNA-VALORES
  26.            ADD  1 TO DIGITO-4 GIVING FILA-VALORES.
  27.            MOVE 4 TO PUNTERO-STRING.
  28.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  29.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  30.  
  31.       *    5° DIGITO.
  32.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 4) TO COLUMNA-VALORES
  33.            ADD  1 TO DIGITO-5 GIVING FILA-VALORES.
  34.            MOVE 5 TO PUNTERO-STRING.
  35.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  36.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  37.  
  38.       *    6° DIGITO.
  39.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 5) TO COLUMNA-VALORES
  40.            ADD  1 TO DIGITO-6 GIVING FILA-VALORES.
  41.            MOVE 6 TO PUNTERO-STRING.
  42.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  43.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  44.  
  45.       *    7° DIGITO.
  46.            MOVE TABLA(PUNTERO-DE-TABLA-DE-VALORES, 6) TO COLUMNA-VALORES
  47.            ADD  1 TO DIGITO-7 GIVING FILA-VALORES.
  48.            MOVE 7 TO PUNTERO-STRING.
  49.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  50.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  51.  
  52.       *    SEPARADOR
  53.            MOVE 8 TO PUNTERO-STRING.
  54.            STRING "*"
  55.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  56.  
  57.       *    EL RESTO ES DE LA TABLA C (3).
  58.      *    8° DIGITO.
  59.            MOVE  3 TO COLUMNA-VALORES
  60.            ADD   1 TO DIGITO-8 GIVING FILA-VALORES.
  61.            MOVE  9 TO PUNTERO-STRING.
  62.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  63.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  64.  
  65.       *    9° DIGITO.
  66.            MOVE  3 TO COLUMNA-VALORES
  67.            ADD   1 TO DIGITO-9 GIVING FILA-VALORES.
  68.            MOVE 10 TO PUNTERO-STRING.
  69.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  70.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  71.  
  72.       *    10° DIGITO.
  73.            MOVE  3 TO COLUMNA-VALORES
  74.            ADD   1 TO DIGITO-10 GIVING FILA-VALORES.
  75.            MOVE 11 TO PUNTERO-STRING.
  76.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  77.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  78.  
  79.       *    11° DIGITO.
  80.            MOVE  3 TO COLUMNA-VALORES
  81.            ADD   1 TO DIGITO-11 GIVING FILA-VALORES.
  82.            MOVE 12 TO PUNTERO-STRING.
  83.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  84.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  85.  
  86.       *    12° DIGITO.
  87.            MOVE  3 TO COLUMNA-VALORES
  88.            ADD   1 TO DIGITO-12 GIVING FILA-VALORES.
  89.            MOVE 13 TO PUNTERO-STRING.
  90.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  91.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  92.  
  93.       *    13° DIGITO.
  94.            MOVE  3 TO COLUMNA-VALORES
  95.            ADD   1 TO DIGITO-13 GIVING FILA-VALORES.
  96.            MOVE 14 TO PUNTERO-STRING.
  97.            STRING CARACTER(FILA-VALORES, COLUMNA-VALORES)
  98.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  99.  
  100.       *    CIERRE.
  101.            MOVE 15 TO PUNTERO-STRING.
  102.            STRING "+"
  103.                  DELIMITED BY SIZE INTO EAN-13-X POINTER PUNTERO-STRING.
  104.  
  105.            MOVE EAN-13-X TO CODBA-AUX.
  106.  
  107.       ******************************************************************


El digito verificador se obtiene :
Numerar los digitos de derecha a izquierda
Sumar los de las posiciones pares.(x)
Sumar los de las posiciones impares (y)
Calcular z=x*3y
Buscar el primer numero divisible por diez siquiente a este resultado (m)
El verivicador es m-z.

Por ejemplo el verificador de 123456789012 es 8
La suma de los digitos pares da 26
La suma de los impares da 22
26+22*3=92
100-92=8

Espero te sirva.
Gusaiello is offline   Responder Con Cita